Android如何重新启动我的应用程序以前的运行活动

时间:2017-03-24 13:51:21

标签: android android-theme

我需要使用设置页面中的按钮更改我的应用程序的主题,我的问题是当我更改主题时我需要重新创建以前的运行活动来加载新的主题颜色和背景图像

任何解决方案?

1 个答案:

答案 0 :(得分:2)

您可以创建一个BaseActivity,以便您可以刷新所有"#34;活动将扩展,此活动将监听其他活动结果并在需要时重新创建自己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();
    }

}

我在一个超级简单的案例中尝试过,但我可能会错过一些对你的真实应用程序的副作用。