相关疑难解决方法(0)

Android TabLayout没有重新加载片段

我注意到TabLayout它只Fragments需要显示一次,所以当我替换Fragment包含TabLayout并切换回它时,它不会重新创建Fragments它保持,因此它们不再显示任何内容.是这样的设计还是我做错了什么?我Fragment在a中使用外部NavigationDrawer,当用户切换到另一个Fragment并返回时,该选项卡Fragments为空,因为它们不会被重新创建.我还注意到在切换回包含它们的片段后,Tabs的行为非常奇怪(它们在跳跃下面的白线,你可以在两个标签之间保持它而不触摸屏幕)

我正在使用的代码:

public class Fragment1 extends Fragment {
    private static ViewPager viewPager;
    private static TabLayout tabLayout;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Utils.changeLanguage(getActivity());

        final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.LinesOverlay);

        LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);

        View view = localInflater.inflate(R.layout.fragment1, container, false);
        viewPager = (ViewPager) view.findViewById(R.id.viewpager);
        tabLayout = (TabLayout) view.findViewById(R.id.tabs);

        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-tabs navigation-drawer androiddesignsupport

7
推荐指数
1
解决办法
1763
查看次数

Android FragmentTab主机和片段内的片段

我有一个像这样的层次结构的app:

FragmentTabHost (Main Activity)
  - Fragment (tab 1 content - splitter view)
    - Fragment (lhs, list)
    - Framment (rhs, content view)
  - Fragment (tab 2 content)
  - Fragment (tab 2 content)
Run Code Online (Sandbox Code Playgroud)

所有片段视图都从资源中膨胀.

当应用程序启动时,一切都会显示,看起来很 当我从第一个选项卡切换到另一个选项卡并再次返回时,我试图重新创建选项卡1的视图时出现膨胀异常.

深入挖掘,这就是发生的事情:

  • 在第一次加载时,对分割器视图进行膨胀会导致其两个子片段被添加到片段管理器中.
  • 在切换远离第一个选项卡时,它的视图被销毁,但它的子片段留在片段管理器中
  • 在切换回第一个选项卡时,视图会重新膨胀,并且由于旧的子片段仍在片段管理器中,因此在实例化新的子片段时会抛出异常(通过膨胀)

我通过从片段管理器中删除子片段(我正在使用Mono)解决了这个问题,现在我可以切换标签而没有例外.

public override void OnDestroyView()
{
    var ft = FragmentManager.BeginTransaction();
    ft.Remove(FragmentManager.FindFragmentById(Resource.Id.ListFragment));
    ft.Remove(FragmentManager.FindFragmentById(Resource.Id.ContentFragment));
    ft.Commit();

    base.OnDestroyView();
}
Run Code Online (Sandbox Code Playgroud)

所以我有几个问题:

  1. 以上是正确的方法吗?
  2. 如果没有,我应该怎么做?
  3. 无论哪种方式,保存实例状态如何与所有这些相关联,以便在切换选项卡时不会丢失视图状态?

android xamarin.android android-tabhost android-fragments android-nested-fragment

6
推荐指数
1
解决办法
3393
查看次数