Reputation: 45
Hi, to all!
I have a problem with the TabMenu, below i've posted a GIF, which shows how it works, it doesn't work correctly.
How it works in code:
MainActivity(ViewPager, TabsLayout)->FragmnetAdapter(For tabs layout)
How its must be: "Home"(HomeFragment), "History"(HistoryFragment), "Places"(PlacesFragment)
Now when its start at "Home" start "Home" but and call "History" on "Hstory" call "Places"
But in code i didnt see some problems can you help me, please:)
Here is the 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);
}}
Home&History&PlaceFragment don't needed i think so:)
Thanks a lot!:)
Upvotes: 0
Views: 43
Reputation: 18022
The tabs and the ViewPager are ok, it always preloads at least the previous and the next fragments.
You could only show the dialog when the fragment is shown and it is still loading the info.
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
if (fragmentIsLoadingInfo()) { // implement this
showLoading(); // implement this
}
}
}
Also check the setOffscreenPageLimit of a ViewPager to understand what is happening and to update this value if you, for example, want all the three fragments to load at once. Its a shame that if you set it to 0 it still works as if it was 1.
Upvotes: 1