我正在为我的应用程序设置主题。主题设置得很好。我主要活动有两项活动,其他活动是设置活动。
当我从设置活动设置主题时,我调用了主要活动onBackPressed设置活动。所以改变了的主题出现了。
但是,如果我按下主要活动,它会再次显示前一主题的主要活动,并在第二次关闭应用程序。
它不应该再显示以前的主题。如果立即按下,我想完成主要活动。
我试过调用完成onBackPressed的主要活动,但它没有用。
怎么办?
主要活动
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();
}
}
编辑:
如果我刚刚完成设置活动,则更改的主题剂量不会应用于主要活动。正如我所说的Theme.onActivityCreateSetTheme(this); ---- onCreate主要活动,所以为此我已经从设置活动再次启动了主要活动。
或者,如果我完成设置活动,我该如何应用主题?
谢谢..
答案 0 :(得分:4)
在“设置活动”中按下后,只需完成“设置活动”。 所以它将转到主要活动。
所以把下面的代码放在覆盖方法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();
}
答案 1 :(得分:2)
它可以通过很多方式完成......
在您的主要活动中:
Intent i = new Intent(this, Settings.class);
MainActivity.this.finish();
startActivity(i);
在“设置活动:
”中 @Override
public void onBackPressed() {
super.onBackPressed();
Intent i = new Intent(this, MainActivity.class);
Settings.this.finish();
startActivity(i);
}
或者在清单文件中使用 android:noHistory =“true”
<activity android:name=".Settings"
android:noHistory="true"/>
答案 2 :(得分:0)
试试这个
{//.............
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();
}
}
答案 3 :(得分:0)
请在清单文件中尝试启动模式
<activity
android:name="com.xyz.MainActivity"
android:launchMode="singleInstance"
>