0

卿と呼ばれる動作していないために、私は複数のタブため単一のフラグメントを使用する必要があります。私は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); 
} 

答えて

0

を設定最初の年齢。 2回呼び出されるのは、viewPagerが次のページを事前に準備しているため、ページ1を入力するとページ2が作成されているため、右にスワイプするとページングが高速になります。

は私たちにNewsFragmentためのコードを表示してくださいさらにあなたを助けるために。

また、FragmentStatePagerAdapterの代わりに固定数のタブ(例では5個)があり、FragmentPagerAdapterの使用例であるドキュメントに従って、FragmentStatePagerAdapterの代わりにFragmentPagerAdapterを使用することを検討することもできます。私は上記のリンク先のページから

ドキュメンテーション:そのようなタブのセットなどを通じてページングする通常より静的フラグメント、一握りがあるとき

ページャのこのバージョンは、使用に最適です。

関連する問題