Может кто-нибудь помочь мне понять, почему следующий бит кода работает на одном фрагменте, но не на другом, заставляя меня в два раза больше внутренних фрагментов, чем я должен был бы, и TabLayout и ViewPager рассинхронизироваться:ViewPager с вдвое большим количеством фрагментов, как и должно быть
Фрагмент:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mainView = inflater.inflate(R.layout.fragment_companies_ranking, container, false);
pagerAdapter = new MyPagerAdapter(getFragmentManager());
tabLayout = (TabLayout)mainView.findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("1");
tabLayout.addTab(tabLayout.newTab().setText("2"));
tabLayout.addTab(tabLayout.newTab().setText("3"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
viewPager = (ViewPager)mainView.findViewById(R.id.pager);
viewPager.setAdapter(pagerAdapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
viewPager.requestFocus();
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
return mainView;
}
Xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@android:color/white"
tools:context=".activities.companies.MyFragment">
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
app:tabMode="fixed"
android:background="@color/color_white"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top" />
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_below="@id/tab_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
PagerAdapter:
public class MyPageAdapter extends FragmentStatePagerAdapter {
private ArrayList<Fragment> fragments = new ArrayList<>(2);
public MyPageAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
fragments.clear();
fragments.add(OneFragment.newInstance());
fragments.add(TwoFragment.newInstance());
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
}
Update:
Хорошо, нашел его, у меня были некоторые остатки кода из MainActivity, где фрагмент будучи инстансы и там я добавлял тот же фрагмент, содержащий ViewPager.
Не совсем уверен, почему он так себя вел, поскольку оба ViewPagers были в разных местах и имели разные имена, но все же это то, что вызывало странную ситуацию.
Кто-нибудь знает ответ на вопрос, почему именно это происходило, когда оба случая были технически разными и не должны влиять друг на друга?
Или я что-то упускаю?
В любом случае, я благодарю всех за идеи, которые заставили меня пересмотреть и пересмотреть все, что касается всех используемых фрагментов, без этого я, вероятно, потеряю в этом путанице в течение нескольких часов в лучшем случае.