【问题标题】:Open same fragment after activity recreate活动重新创建后打开相同的片段
【发布时间】:2017-10-23 07:18:36
【问题描述】:

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

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

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

更改主题的代码

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

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

【问题讨论】:

  • 您能否展示一下您是如何处理代码中的片段的
  • 更换主题后是否再次调用父活动?
  • @PratikVyas 你的意思是我如何打开片段?
  • @Himanshuarora 是的,在我重新创建任务生成器之前的所有活动中更改主题。
  • 是的,也分享该代码,以便人们可以看到您在做什么并可以帮助您

标签: android android-fragments recreate


【解决方案1】:

试试这个,它可能对你存储的 is_theme 有所帮助,

现在使用 Intent 重启活动

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

当activity在其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();
}

【讨论】:

  • 如果我这样做,那么片段的回栈会怎样。
  • 是否要维护backstack?
  • ft.addToBackStack(null);用于处理 backstack,如果你想这样做
  • @PratikVyas IT 将无法正常工作。阅读她也想更改工具栏颜色的问题和待办事项,因此她必须重新创建活动。但是您的代码只打开相同的片段而不打开以前的片段。
  • @PratikVyas 我不知道把这段代码放在哪里。正如 androidnoobdev 提到的用户和设置片段。
猜你喜欢
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多