0

Sir, muss ich einzelnes Fragment für mehrere Tabs verwenden. Ich habe es mit FragmentStatePagerAdapter implementiert, aber nach dem Debuggen habe ich, dass einige der Registerkarten Daten anzeigt, aber nicht korrekt. Dies ist, weil getItem zweimal aufgerufen bitte helfen Sie mir so früh wie möglich.Für mehrere Tabs Single Fragment funktioniert nicht GetItem zweimal aufgerufen

Ich habe Argumente von getItem übergeben. Er übergibt Argumente zweimal, wenn getItem zweimal aufruft. daher überschreibt es Daten von Argumenten. Ich habe 6 Tabs, aber nur 1, 3 und 5 Tab zeigt Daten, aber Daten sind von 2, 4 und 6. Tab und 2, 4 und 6. Tab zeigt nichts auf dem Bildschirm.

funktioniert keine Lösung von früheren Fragen.

ViewPager-Code

public class ViewPagerAdapter extends FragmentStatePagerAdapter { 

int TAB_COUNT=5; 
Context mContext; 
public ViewPagerAdapter(FragmentManager fm,Context context) { 
    super(fm); 
    mContext=context; 
} 

@Override 
public Fragment getItem(int position) { 
    NewsFragment fragment = new NewsFragment(); 
    Bundle args = new Bundle(); 
    args.putString("title", String.valueOf(getPageTitle(position))); 
    args.putString("data", "data"); 
    fragment.setArguments(args); 
    return fragment; 

} 

@Override 
public CharSequence getPageTitle(int position) { 

    return mContext.getResources().getStringArray(R.array.tabs)[position]; 
} 

@Override 
public int getCount() { 
    return TAB_COUNT; 
} 

}

Hörer Registerkarte ändern:

@Override 
public void onTabSelected(TabLayout.Tab tab) { 
    viewPager.setCurrentItem(tab.getPosition()); 

} 



@Override 
public void onPageSelected(int position) { 

    TabLayout.Tab tab = tabLayout.getTabAt(position); 
    if (tab != null) { 
     tab.select(); 
    } 
} 

Adapter

private void setUpTab() { 
    viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), this); 
    for (int i = 0; i < viewPagerAdapter.getCount(); i++) { 
     tabLayout.addTab(
       tabLayout.newTab() 
         .setText(viewPagerAdapter.getPageTitle(i))); 
    } 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    viewPager.setAdapter(viewPagerAdapter); 
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    viewPager.addOnPageChangeListener(this); 
    tabLayout.addOnTabSelectedListener(this); 
} 

Antwort

0

getItem Einstellung jedes Mal aufgerufen wird der Adapter erstellt eine neue p Alter zum ersten Mal. Der Grund für den doppelten Aufruf ist, dass der viewPager die nächste Seite im Voraus vorbereitet. Wenn Sie Seite 1 eingeben, wird Seite 2 bereits erstellt, um schneller zu blättern, wenn Sie nach rechts wischen.

Um Ihnen weiter zu helfen, zeigen Sie uns bitte den Code für NewsFragment.

Sie könnten auch die Verwendung von FragmentPagerAdapter anstelle von FragmentStatePagerAdapter in Betracht ziehen, da Sie scheinbar eine feste Anzahl von Registerkarten haben (5 in Ihrem Beispiel) und entsprechend der Dokumentation, die der Anwendungsfall für FragmentPagerAdapter ist.

Dokumentation von der Seite verlinkt ich oben:

Diese Version des Pagers ist am besten für den Einsatz, wenn es eine Handvoll von typischerweise mehr statischen Fragmenten ist durch zu lagert, wie eine Gruppe von Tabs.

Verwandte Themen