android-如何避免 tablayout 子组件再次加载数据

标签 android android-tablayout

我正在使用 ViewPager 的 tablayout,我有 3 个选项卡,并且我正在使用 Fragment 作为我的选项卡。问题是,当我转到选项卡 3 时,选项卡 1 的内容完全丢失,需要再次重新加载,我不想要这样的东西,我想让它们保存数据,但不需要再次重新加载。

这是我的代码:

private void setupViewPager(ViewPager viewPager) {
    Bundle bl = getIntent().getExtras();

    Bundle bundle = new Bundle();
    bundle.putString("for", bl.getString("for"));
    if (bl.getString("for").equals("catid"))
        bundle.putString("catid", bl.getString("catid"));

    Bundle bundle2 = new Bundle();
    bundle2.putString("for", bl.getString("for"));
    if (bl.getString("for").equals("catid"))
        bundle2.putString("catid", bl.getString("catid"));

    Bundle bundle3 = new Bundle();
    bundle3.putString("for", bl.getString("for"));
    if (bl.getString("for").equals("catid"))
        bundle3.putString("catid", bl.getString("catid"));

    FragmentList latest = new FragmentList();
    bundle.putString("forw","latest");
    latest.setArguments(bundle);

    FragmentList topvisit = new FragmentList();
    bundle2.putString("forw","topvisit");
    topvisit.setArguments(bundle2);

    FragmentList por_mabhas = new FragmentList();
    bundle3.putString("forw","por_mabhas");
    por_mabhas.setArguments(bundle3);

    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(por_mabhas, "پرمبحث ترین خبرها");
    adapter.addFragment(topvisit, "پربازدیدترین اخبار");
    adapter.addFragment(latest, "تازه ترین خبرها");
    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}



private void declare() {
    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);

    final int finalPos = 2;
    tabLayout.post(new Runnable() {
        @Override
        public void run() {
            int right = ((ViewGroup) tabLayout.getChildAt(0)).getChildAt(finalPos).getRight();
            tabLayout.scrollTo(right,0);
            tabLayout.getTabAt(finalPos).select();
        }
    });
}

我该怎么做?

最佳答案

use setOffscreenPageLimit(TOTAL_PAGE);如果你有N个页面,你可以使用这个,这样它将把所有页面保留在内存中。

viewpager.setOffscreenPageLimit(TOTAL_PAGE);

关于android-如何避免 tablayout 子组件再次加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45036820/

相关文章:

android - 选项卡图标未填满全宽

java - Android - fragment 中 TabLayout 的中间选项卡错误

java - 在分享 Intent android中设置字体

java - 刷新我的光标适配器中的 ListView?

android - 膨胀后 subview 为空

android - 去除android上TabLayout下方的阴影

android - 如何使Tablayout指标和文本的宽度相同

java - onItemClick 加载空 Activity

java - 如何在我自己的应用程序中禁用 EditText 中的所有第三方键盘?

android - ViewPager.setCurrentItem 在 PagerAdapter 中返回错误的位置