在重新创建活动后打开相同的片段

时间:2017-05-23 11:06:41

标签: android android-fragments recreate

我有片段容器活动,我根据操作替换片段。在一个片段中,我提供了更改app的主要颜色的选项。因此用户可以更改工具栏和其他组件的色彩。 但在应用主题后我重新创建活动,因此基本活动中的工具栏也会使用新的颜色代码重新初始化。

现在我的问题是我的应用程序序列是这样的 设置>用户设置>主题设置

因此,当用户更改主题时,我希望在重新创建后再次显示相同的片段。 我也看到了其他问题和应用逻辑,但不适合我。

更改主题的代码

private void setThemePreference(String primary, String primaryDark, String text) {
    int requiredLength = 0;

    if (primary.length() < 6) {
        requiredLength = 6 - primary.length();

        for (int i = 0; i < requiredLength; i++) {

            primary = "0" + primary;
        }
    }

    if (primaryDark.length() < 6) {
        requiredLength = 6 - primaryDark.length();

        for (int i = 0; i < requiredLength; i++) {

            primaryDark = "0" + primaryDark;
        }
    }

    if (text.length() < 6) {
        requiredLength = 6 - text.length();

        for (int i = 0; i < requiredLength; i++) {

            text = "0" + text;
        }
    }

    UserPreferenceManager.preferencePutString(
        AppConstants.SharedPreferenceKeys.PrimaryColor,primary);
    UserPreferenceManager.preferencePutString(
        AppConstants.SharedPreferenceKeys.PrimaryDarkColor, primaryDark);
    UserPreferenceManager.preferencePutString(
        AppConstants.SharedPreferenceKeys.PrimaryTextColor, text);
    UserPreferenceManager.preferencePutBoolean(
        AppConstants.SharedPreferenceKeys.IS_ThemeChanged, true);

    TaskStackBuilder.create(getActivity())
        .addNextIntent(new Intent(getActivity(), MainActivity.class))
        .addNextIntent(getActivity().getIntent())
        .startActivities();

    // applied this also
    //getActivity().recreate();

    getActivity().overridePendingTransition(0, 0);
}

打开主题片段的代码

getActivity().getSupportFragmentManager()
    .beginTransaction()
    .setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left)
    .addToBackStack(TAG)
    .replace(R.id.container, fragment)
    .commit();

请大家帮忙。我没有太多的经验,甚至没有新的开发人员。

1 个答案:

答案 0 :(得分:0)

试试这个,它可能会有所帮助,因为你已经存储了is_theme,

现在使用Intent重新启动活动

startActivity(new Intent(MainActivity.this,MainActivity.class));

当活动在其onResume方法中启动时,检查主题是否已更改,如果更改了主题,则调用片段

@Override
    protected void onResume() {
        super.onResume();

        if(UserPreferenceManager.preferencePutBoolean(
                AppConstants.SharedPreferenceKeys.IS_ThemeChanged, true)){
            UserPreferenceManager.preferencePutBoolean(
                AppConstants.SharedPreferenceKeys.IS_ThemeChanged, false)
            YourActivity activity = (YourActivity) getActivity();
            activity.goToSecondFragment();
        }
    }

方法

public void goToSameFragment(){
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment sameFragment = new sameFragment();
    ft.replace(R.id.fragment_container, sameFragment);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.addToBackStack(null);
    ft.commit();
}