如何完成 Main Activity onBackPressed?
How to finish Main Activity onBackPressed?
我正在为我的应用程序设置主题。主题设置得很好。我有两个主要活动 activity,另一个是设置 activity.
当我从设置 activity 设置主题时,我调用了设置 activity 的 Main Activity onBackPressed。于是出现了改变的主题。
但是,如果我按下主 activity 的后退键,它会再次显示具有先前主题的主 activity,并在第二次关闭应用程序。
它不应该再次显示以前的主题。如果立即返回,我想完成 Main activity。
我尝试调用 main 的 finish onBackPressed activity 但它没有用。
怎么办?
主要Activity
public class MainActivity extends AppCompatActivity {
private NavigationView navigationView;
private DrawerLayout drawerLayout;
Toolbar mToolbar;
private MainFragment mFragment;
private int no,no1,no2;
@Override
protected void onCreate(Bundle savedInstanceState) {
Theme.onActivityCreateSetTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DatabaseHelper db = new DatabaseHelper(this);
db.createDatabase();
setUpToolbar();
drawerLayout = (DrawerLayout) findViewById(R.id.nav_drawer);
navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
drawerLayout.closeDrawers();
menuItem.setChecked(true);
switch (menuItem.getItemId()) {
case R.id.settings:
Intent i = new Intent(getApplicationContext(),Settings.class);
startActivity(i);
}
return true;
}
});
mFragment = new MainFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.nav_contentframe, mFragment).commit();
}
private void setUpToolbar() {
mToolbar = (Toolbar) findViewById(R.id.toolbar);
if (mToolbar != null) {
mToolbar.setTitle("");
setSupportActionBar(mToolbar);}
if (mToolbar != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mToolbar.setNavigationIcon(R.drawable.ic_drawer);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
drawerLayout.openDrawer(GravityCompat.START);
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main2, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
Intent i = new Intent(this,Settings.class);
startActivity(i);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed()
{
super.onBackPressed();
this.finish();
}
}
编辑:
如果我刚刚完成设置 activity,更改的主题不会应用到主要 activity。正如我所说的 Theme.onActivityCreateSetTheme(this); ----onCreate of main activity,所以为此我从设置 activity.
再次启动了 main activity
或者设置完成后如何应用主题activity?
谢谢..
在设置 Activity 中按下返回键,即可完成设置 Activity。
所以它将转到 Main Activity.
所以将下面的代码放在覆盖方法 onBackPressed 中。
@Override
public void onBackPressed() {
super.onBackPressed();
Intent i=new Intent(this,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
finish();
}
可以通过多种方式完成...
在你的主要 Activity:
Intent i = new Intent(this, Settings.class);
MainActivity.this.finish();
startActivity(i);
在您的设置中 Activity:
@Override
public void onBackPressed() {
super.onBackPressed();
Intent i = new Intent(this, MainActivity.class);
Settings.this.finish();
startActivity(i);
}
或在 Manifest 文件中使用 android:noHistory="true"
<activity android:name=".Settings"
android:noHistory="true"/>
这样试试
{//.............
Intent i = new Intent (this, Settings.class);
startActivityForResult(i, 123);
//............
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK&&requestCode==123){
startActivity(new Intent(this,MainActivity.class));
finish();
}
}
请在您的清单文件中尝试启动模式
<activity
android:name="com.xyz.MainActivity"
android:launchMode="singleInstance"
>
我正在为我的应用程序设置主题。主题设置得很好。我有两个主要活动 activity,另一个是设置 activity.
当我从设置 activity 设置主题时,我调用了设置 activity 的 Main Activity onBackPressed。于是出现了改变的主题。
但是,如果我按下主 activity 的后退键,它会再次显示具有先前主题的主 activity,并在第二次关闭应用程序。
它不应该再次显示以前的主题。如果立即返回,我想完成 Main activity。
我尝试调用 main 的 finish onBackPressed activity 但它没有用。
怎么办?
主要Activity
public class MainActivity extends AppCompatActivity {
private NavigationView navigationView;
private DrawerLayout drawerLayout;
Toolbar mToolbar;
private MainFragment mFragment;
private int no,no1,no2;
@Override
protected void onCreate(Bundle savedInstanceState) {
Theme.onActivityCreateSetTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DatabaseHelper db = new DatabaseHelper(this);
db.createDatabase();
setUpToolbar();
drawerLayout = (DrawerLayout) findViewById(R.id.nav_drawer);
navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
drawerLayout.closeDrawers();
menuItem.setChecked(true);
switch (menuItem.getItemId()) {
case R.id.settings:
Intent i = new Intent(getApplicationContext(),Settings.class);
startActivity(i);
}
return true;
}
});
mFragment = new MainFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.nav_contentframe, mFragment).commit();
}
private void setUpToolbar() {
mToolbar = (Toolbar) findViewById(R.id.toolbar);
if (mToolbar != null) {
mToolbar.setTitle("");
setSupportActionBar(mToolbar);}
if (mToolbar != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mToolbar.setNavigationIcon(R.drawable.ic_drawer);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
drawerLayout.openDrawer(GravityCompat.START);
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main2, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
Intent i = new Intent(this,Settings.class);
startActivity(i);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed()
{
super.onBackPressed();
this.finish();
}
}
编辑:
如果我刚刚完成设置 activity,更改的主题不会应用到主要 activity。正如我所说的 Theme.onActivityCreateSetTheme(this); ----onCreate of main activity,所以为此我从设置 activity.
再次启动了 main activity或者设置完成后如何应用主题activity?
谢谢..
在设置 Activity 中按下返回键,即可完成设置 Activity。 所以它将转到 Main Activity.
所以将下面的代码放在覆盖方法 onBackPressed 中。
@Override
public void onBackPressed() {
super.onBackPressed();
Intent i=new Intent(this,MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
finish();
}
可以通过多种方式完成...
在你的主要 Activity:
Intent i = new Intent(this, Settings.class);
MainActivity.this.finish();
startActivity(i);
在您的设置中 Activity:
@Override
public void onBackPressed() {
super.onBackPressed();
Intent i = new Intent(this, MainActivity.class);
Settings.this.finish();
startActivity(i);
}
或在 Manifest 文件中使用 android:noHistory="true"
<activity android:name=".Settings"
android:noHistory="true"/>
这样试试
{//.............
Intent i = new Intent (this, Settings.class);
startActivityForResult(i, 123);
//............
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK&&requestCode==123){
startActivity(new Intent(this,MainActivity.class));
finish();
}
}
请在您的清单文件中尝试启动模式
<activity
android:name="com.xyz.MainActivity"
android:launchMode="singleInstance"
>