我有一个使用BottomNavigationView
的主要活动,其中第一个Fragment
具有带有某些标签的嵌套ViewPager
。当我导航到第二个或第三个“主要片段”,然后返回第一个(包含选项卡的那个)时,我想恢复离开时处于活动状态的选项卡。
为此,我将viewPager的当前项目保存在片段的onPause
...中>
@Override public void onPause() { super.onPause(); App.homeTab = viewPager.getCurrentItem(); Log.v(DEBUG_TAG, "item: " + App.homeTab); }
正在
App.homeTab
成为我的Application
子类中的静态文件:
public class MyApp extends Application { public static int homeTab = 0; // [...]
...然后像这样在片段的
onCreateView
中检索该值:
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.fragment_home, container, false); SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter( getContext(), getChildFragmentManager(), HomeCategoryContent.Elements ); viewPager = root.findViewById(R.id.view_pager); viewPager.setAdapter(sectionsPagerAdapter); Log.d(DEBUG_TAG,"restored tab: " + App.homeTab); viewPager.setCurrentItem(App.homeTab); // [...]
[
SectionsPagerAdapter
直接从Android Studio的模板扩展FragmentPagerAdapter
。
它可以工作,但是每次我不得不使用对某些UI组件的静态引用时,我都会感到有点不舒服...
有更好的解决方案吗?这是一个容易发生内存泄漏的问题吗?
我有一个使用BottomNavigationView的主要活动,其中第一个Fragment有一个嵌套的ViewPager,其中包含一些选项卡。当我导航到第二个或第三个“主要片段”,然后返回到第一个(...
static
变量在这种情况下不是必需的。您可以将值存储在仍然有效的任何地方,例如-活动实例变量。它看起来像这样