我正在将ViewPager的当前项目存储在应用程序的子类字段中,以备将来参考。有更好的解决方案吗?

问题描述 投票:-1回答:1

我有一个使用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,其中包含一些选项卡。当我导航到第二个或第三个“主要片段”,然后返回到第一个(...

android android-fragments android-viewpager
1个回答
0
投票

static变量在这种情况下不是必需的。您可以将值存储在仍然有效的任何地方,例如-活动实例变量。它看起来像这样

© www.soinside.com 2019 - 2024. All rights reserved.