@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_create: //run NoteActivity in new note mode
startActivity(new Intent(this, NoteActivity.class));
break;
case R.id.action_theme:
setTheme(R.style.Theme2);
setContentView(R.layout.activity_main);
Intent i = getIntent();
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
// TODO: show settings activity
break;
}
return super.onOptionsItemSelected(item);
}
我的活动顶部有一个菜单项。我想用它来按下时更改主题。我希望在用户启动程序后执行此操作,它最终将用于循环一堆不同的主题!现在我只想让它与一个人合作。我怎么能这样做?
我的回答
主要活动
SharedPreferences pref;
SharedPreferences.Editor editor;
int check;
int newcheck;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pref = getApplicationContext().getSharedPreferences("test", Context.MODE_PRIVATE);
check = pref.getInt("x", 0);
if(check == 0){
setTheme(R.style.AppTheme);
}else{
setTheme(R.style.Theme2);
}
setContentView(R.layout.activity_main);
noteActivity = new NoteActivity();
mListNotes = (ListView) findViewById(R.id.main_listview);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_create: //run NoteActivity in new note mode
startActivity(new Intent(this, NoteActivity.class));
break;
case R.id.action_theme:
pref = getApplicationContext().getSharedPreferences("test", Context.MODE_PRIVATE);
editor = pref.edit();
newcheck = pref.getInt("x",0);
if(newcheck == 0) {
newcheck = 1;
}else if(newcheck == 1){
newcheck = 0;
}
editor.clear();//clears the editor to avoid errors
editor.putInt("x",newcheck);//add in new int
editor.commit();//commit
//restart the activity
Intent i = getIntent();
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();//close activity - avoid crash
startActivity(i);//start activity
//TODO show settings activity
break;
}
return super.onOptionsItemSelected(item);
}
答案 0 :(得分:1)
因此,只要我了解您的问题,您就可以考虑考虑选择父Activity
并在其中设置Fragment
,以便您可以更改{{1}的主题1}}更改主题的控件来自您的父Fragment
。所以,这就是你如何实现这种行为。
Activity
中获取一个片段容器,然后在Activity
的{{1}}函数中启动该容器中的Fragment
。 onCreate
中部署哪个主题时,您可以考虑在点击菜单选项时通过执行另一个片段交易来再次替换Activity
。 Fragment
中保存所选主题,以便每次Fragment
启动时,您都可以通过在SharedPreferences
Fragment
函数中设置主题来正确设置主题从onCreateView
读取所选主题后。 现在,如果您正考虑如何在Fragment
中设置主题,那么this post可能会对您有所帮助。为方便起见,我从那里复制代码。
SharedPreferences
我希望你已经有了这个想法。如果还有其他需要澄清的地方,请告诉我。