我正在使用 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/