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

有什么办法吗?

最佳答案

您可以创建一个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/

10-08 21:51