卿と呼ばれる動作していないために、私は複数のタブため単一のフラグメントを使用する必要があります。私はFragmentStatePagerAdapterを使用して、それを実装しているが、デバッグの後、私は、そのタブが表示されたデータの一部が、正しくないを持っています。 のgetItem二回できるだけ早期に私を助けてくださいと呼ばれるためです。は、複数のタブを単一のフラグメントがのgetItemは二回
私はのgetItemから引数を渡しました。 getItemの呼び出しと同じように2回引数を渡します。したがって、引数のデータをオーバーライドします。私は6つのタブを持っていますが、1,3,5タブだけがデータを表示しますが、データは2,4,6番目のタブであり、2,4,4番目のタブは画面上に何も表示しません。
は、前の質問のいずれかのソリューションを働いていません。
ViewPagerコード
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;
}
}
リスナーのタブを変更するには:
@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();
}
}
アダプタのgetItemは、アダプタが新しいPを作成するたびに呼び出されます
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);
}