0

Hallo, an alle!

Ich habe ein Problem mit dem TabMenu, unten habe ich ein GIF gepostet, das zeigt, wie es funktioniert, es funktioniert nicht richtig.
Wie es in Code funktioniert:
Tabs Menü Android - nicht korrekt Anruf Fragmente

MainActivity (ViewPager, TabsLayout) -> FragmnetAdapter (Für Registerkarten Layout)
Wie seine sein muss: "Home" (HomeFragment), "Geschichte" (HistoryFragment) "Places" (PlacesFragment)
Nun, wenn sein Start bei "Home" "Home" aber und Aufruf "History" auf "hstory" call "Places"
aber in Code starten ich habe nicht sehen einige Probleme kannst du mir helfen, bitte :)

Show's problem

Hier ist der Code:
MainActivity:

public class MainActivity extends AppCompatActivity { 

@BindView(R.id.appToolbarMainTabs) 
Toolbar appToolbar; 
@BindView(R.id.tabLayoutTabs) 
TabLayout tabs; 
@BindView(R.id.viewPager) 
ViewPager viewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ButterKnife.bind(this); 
    setSupportActionBar(appToolbar); 
    setupViewPager(viewPager); 
    tabs.setupWithViewPager(viewPager); 
} 

// Add Fragments to Tabs 
private void setupViewPager(ViewPager viewPager) { 
    FragmentTabsAdapter adapter = new FragmentTabsAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new HomeFragment(), getString(R.string.home_tab)); 
    adapter.addFragment(new HistoryFragment(), getString(R.string.history_tab)); 
    adapter.addFragment(new PlacesFragment(), getString(R.string.places_tab)); 
    viewPager.setAdapter(adapter); 
}} 


FragmentAdapter:

public class FragmentTabsAdapter extends FragmentPagerAdapter { 

private final List<Fragment> mFragmentList = new ArrayList<>(); 
private final List<String> mFragmentTitleList = new ArrayList<>(); 

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

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

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

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

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



Startseite & Geschichte & PlaceFragment benötigt nicht ich denke, so :)
Vielen Dank! :)

+0

Ich nehme an, dass Sie in Ihrem 'PlacesFragment' den ProgressDialog zeigen? Die Funktionsweise des PagerAdapters besteht darin, dass er die Fragmente vorlädt, die als nächste kopiert werden können. Wenn Sie also zum 'HistoryFragment' gehen, wird auch das 'PlacesFragment' erstellt. ProgressDialog ist sowieso ein veraltetes Verhaltensmuster. Es wäre am besten, wenn Sie eine ProgressBar in Ihre Ansicht einfügen und dann die Ansichten wechseln, nachdem der Ladevorgang abgeschlossen ist. – AChez9

+0

@ AChez9 Ja, Sie haben Recht, aber ich möchte nicht inline ProgressBar verwenden, und wenn ich richtig verstehe, Sie traurig, dass es eine korrekte Arbeit von tabsMenu ist? und mein Code hat keine Probleme? –

Antwort

1

Die Tabs und die ViewPager sind ok, es preloads immer mindestens die vorherigen und die nächste Fragmente.

Sie konnten den Dialog nur anzeigen, wenn das Fragment angezeigt wird und die Informationen noch geladen werden.

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
    if (fragmentIsLoadingInfo()) { // implement this 
     showLoading(); // implement this 
    } 
    } 
} 

Auch die setOffscreenPageLimit eines ViewPager zu überprüfen, um zu verstehen, was passiert ist und um diesen Wert zu aktualisieren, wenn Sie zum Beispiel wollen, dass alle drei Fragmente auf einmal zu laden. Es ist eine Schande, wenn Sie es auf 0 setzen, funktioniert es immer noch, als wäre es 1.

+0

Danke Mann, morgen werde ich es versuchen :) Und ich werde neue Informationen schreiben! –