我需要使用设置页面中的按钮来更改应用程序的主题,我的问题是当我更改主题时,我需要重新创建之前的运行活动以加载新的主题颜色和背景图像
有什么办法吗?
最佳答案
您可以创建一个BaseActivity
,所有“刷新”活动都将扩展,该活动将监听其他活动的结果,并在需要时重新创建自己的recreate()
(又名其他活动使用意图数据告知这样做)
public class BaseActivity extends Activity {
private static final int REQUEST_CODE = 1;
protected static boolean SHOULD_CASCADE_REFRESH = false;
...
// Use this method instead of classic startActivity() one
protected void customStartActivity(intent){
startActivityForResult(intent, REQUEST_CODE);
}
// Use this method to finish and cause refresh of paused activity
protected void customFinish(){
if(SHOULD_CASCADE_REFRESH) {
Intent resultIntent = new Intent();
resultIntent.putExtra("shouldRecreateActivity", true);
setResult(RESULT_OK, resultIntent);
}
SHOULD_CASCADE_REFRESH = false;
finish();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(REQUEST_CODE == requestCode){
if(data.getBooleanExtra("shouldRecreateActivity", false)){
// Magic is here
SHOULD_CASCADE_REFRESH = true;
this.recreate();
}
}
}
}
然后,在您的设置活动中,您必须根据想要的行为(刷新或不刷新)设置意图数据:
public class SettingsActivity extends BaseActivity {
...
private void updateTheme(){
SHOULD_CASCADE_REFRESH = true;
// or
// SHOULD_CASCADE_REFRESH = false;
customFinish();
}
}
我在一个非常简单的案例中尝试过,但是我可能会错过一些对您实际应用程序的副作用。
关于android - Android如何重新启动我的应用程序的先前运行 Activity ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43001246/