TabLayout 片段问题
TabLayout Fragment Issue
Current layout
以上是我正在处理的 Android 应用程序中的应用程序布局。有一个activity,它有一个BottomNavigationView。使用以下方式管理导航:
this.getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commit();
现在,在这个片段上,我有一个 TabLayout 和一个 ViewPager,如图所示。 ViewPager 侦听 TabLayout 选择器,可以通过滑动 ViewPager 或单击选项卡来更改它。工作正常..
选择一个选项卡后,我将加载另一个带有 RecyclerView 的 Fragment。 RecyclerView 中的内容来自 URL,因此它在 Post() 上更新如下:
CompletableFuture.runAsync(this::prepare);
recyclerView.post(() ->
{
adapter.list = newList;
adapter.notifyDataSetChanged();
progress.setVisibility(View.INVISIBLE);
});
现在我面临的问题:
第一次单击布局图像中的菜单 1 时一切正常。回收者视图能够调用服务并加载内容。现在,如果我将导航切换到菜单 2 或任何其他菜单并尝试返回到菜单 1,则 ViewPager/TabLayout 没有任何进展。在 TabLayout 之前,我可以看到日志,之后什么也看不到。基本上将 currentItem 设置为 TabLayout 被调用,但它不调用下一个 Fragment 的创建,因此它不会再次加载 RecyclerView。 ViewPager 正在使用 FragmentStatePagerAdapter。
TabViewerAdapter extends FragmentStatePagerAdapter
适配器使用 ChildFragmentAdapter 初始化如下:
TabViewerAdapter adapter = new TabViewerAdapter(getChildFragmentManager(), 0, tabs.getTabCount());
我知道行为“0”已被弃用,因此尝试使用“1”以及以下内容:
TabViewerAdapter adapter = new TabViewerAdapter(getChildFragmentManager(), 1, tabs.getTabCount());
尝试了使视图无效、通知适配器和许多其他方法。没有用。
我还注意到,当我切换应用程序时(虽然它的 运行 通过点击 phone 方形按钮转到另一个应用程序)并返回(恢复)然后它再次加载回收器视图.
这意味着,我遗漏了一些东西并尝试了 onResume
方法。但是没用。
我是在做一些愚蠢的事情还是违反了设计模式或惯例?不知道该怎么办..
请帮忙,谢谢。
我通过执行以下操作解决了这个问题:
- 使用
SharedViewModel
处理列表
ListAdapter
用于 RecyclerView
现在一切都很好。
Current layout
以上是我正在处理的 Android 应用程序中的应用程序布局。有一个activity,它有一个BottomNavigationView。使用以下方式管理导航:
this.getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commit();
现在,在这个片段上,我有一个 TabLayout 和一个 ViewPager,如图所示。 ViewPager 侦听 TabLayout 选择器,可以通过滑动 ViewPager 或单击选项卡来更改它。工作正常..
选择一个选项卡后,我将加载另一个带有 RecyclerView 的 Fragment。 RecyclerView 中的内容来自 URL,因此它在 Post() 上更新如下:
CompletableFuture.runAsync(this::prepare);
recyclerView.post(() ->
{
adapter.list = newList;
adapter.notifyDataSetChanged();
progress.setVisibility(View.INVISIBLE);
});
现在我面临的问题:
第一次单击布局图像中的菜单 1 时一切正常。回收者视图能够调用服务并加载内容。现在,如果我将导航切换到菜单 2 或任何其他菜单并尝试返回到菜单 1,则 ViewPager/TabLayout 没有任何进展。在 TabLayout 之前,我可以看到日志,之后什么也看不到。基本上将 currentItem 设置为 TabLayout 被调用,但它不调用下一个 Fragment 的创建,因此它不会再次加载 RecyclerView。 ViewPager 正在使用 FragmentStatePagerAdapter。
TabViewerAdapter extends FragmentStatePagerAdapter
适配器使用 ChildFragmentAdapter 初始化如下:
TabViewerAdapter adapter = new TabViewerAdapter(getChildFragmentManager(), 0, tabs.getTabCount());
我知道行为“0”已被弃用,因此尝试使用“1”以及以下内容:
TabViewerAdapter adapter = new TabViewerAdapter(getChildFragmentManager(), 1, tabs.getTabCount());
尝试了使视图无效、通知适配器和许多其他方法。没有用。
我还注意到,当我切换应用程序时(虽然它的 运行 通过点击 phone 方形按钮转到另一个应用程序)并返回(恢复)然后它再次加载回收器视图.
这意味着,我遗漏了一些东西并尝试了 onResume
方法。但是没用。
我是在做一些愚蠢的事情还是违反了设计模式或惯例?不知道该怎么办..
请帮忙,谢谢。
我通过执行以下操作解决了这个问题:
- 使用
SharedViewModel
处理列表 ListAdapter
用于RecyclerView
现在一切都很好。