如何根据用户的偏好在两个不同的片段之间切换主片段

时间:2017-05-04 18:07:08

标签: android fragment fragmentmanager

我正在添加一个功能,我的团队的应用程序将允许用户在2个不同的主屏幕之间进行选择。请注意,这两种屏幕都有不同的感觉。

我目前的设置是拥有2个独立的片段Home1Fragment和Home2Fragment,它们都扩展了一个名为HomeFragment的抽象类。默认情况下,用户将使用Home1Fragment,直到他们更改设置页面中的首选项。

我已经实现了这两个片段,并且如果它们独立作为主屏幕,它们都能正常工作。

当我尝试将它们从一个片段切换到另一个片段时,我的问题就存在了。我试过这个

@Override
public void onBackPressed() {
   FragmentManager fragmentManager = getFragmentManager();

   if(fragmentManager.getBackStackEntryCount() > 1) {
      fragmentManager.popBackStackImmediate();

      int option = getSharedPreferences('**hidden**', MODE_PRIVATE).get('home_screen_option', 0);
      Fragment fragment = fragmentManager.findFragmentById(R.id.content);
      if(fragment != null && fragment instanceof HomeFragment) {
          if(f instanceof Home1Fragment && option == HOME_2) {
             f = new Home2Fragment();
          } else if (f instanceof Home2Fragment && option == HOME_1) {
             f = new Home1Fragment();
          }
      }
   } else {
      finish();
   }
}

上面的代码中可能存在拼写错误,因为我是在没有实际代码的情况下动态编写的。

1 个答案:

答案 0 :(得分:0)

您实际上并未在代码中设置新片段。

但我会选择一种基于已保存状态(例如共享首选项中的设置)的不同方法,并由主屏幕本身处理(而不是我提倡反向堆栈操作)。

选项1。

请考虑您的主屏幕是否可以单独Activity。这样,您可以根据Activity中存储的值,在SharedPreferences启动时加载正确的片段。

选项2。

几乎相同的事情,只是使用嵌套片段。让您的主屏幕为Fragment,并在其布局中为子片段添加容器。然后使用子片段管理器相应地加载正确的视图。