1

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

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

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

更改主题的代码

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();

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

4

1 回答 1

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();
}
于 2017-05-23T11:57:17.607 回答