2017-07-11 1 views
0

Ich benutze Tablayout mit ViewPager, ich habe 3 Tabs und ich verwende Fragment für meine Tabs. Das Problem ist, wenn ich auf Tab 3 gehe, der Inhalt von Tab 1 ist vollständig verloren und es muss erneut geladen werden, ich möchte nicht so etwas, ich möchte sie dazu bringen, die Daten zu speichern und es nicht benötigt erneut laden.android- Wie tablayout Kind zu vermeiden, Daten wieder zu laden

dies ist mein Code:

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

Wie kann ich dies tun?

Antwort

1

Verwenden Sie setOffscreenPageLimit(TOTAL_PAGE); Wenn Sie N Seiten haben, können Sie diese verwenden, damit alle Seiten im Speicher bleiben.

viewpager.setOffscreenPageLimit(TOTAL_PAGE); 
Verwandte Themen