代码之家  ›  专栏  ›  技术社区  ›  j jones

安卓-如何避免让孩子再次加载数据

  •  2
  • j jones  · 技术社区  · 8 年前

    我在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();
            }
        });
    }
    

    我该怎么做?

    1 回复  |  直到 8 年前
        1
  •  2
  •   ZeroOne    8 年前

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

    viewpager.setOffscreenPageLimit(TOTAL_PAGE);