0

先生,我必須使用單個片段用於多個選項卡。我已經實現它使用FragmentStatePagerAdapter但調試後,我得到了一些標籤顯示數據,但不正確。這是因爲getItem兩次調用請儘早幫助我。對於多個選項卡單個片段不工作getItem被調用兩次

我已經從getItem傳遞了參數。它作爲getItem調用兩次傳遞參數兩次。因此它覆蓋了參數的數據。我有6個選項卡,但只有1,3和5選項卡顯示數據,但數據是2,4和6選項卡和2,4和6選項卡不顯示屏幕上的任何內容。

無法解決上述問題。

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(); 
    } 
} 

適配器設置

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

的getItem被稱爲每次適配器創建一個新的P年齡第一次。您看到它被調用兩次的原因是viewPager預先準備好了下一頁,所以如果您輸入頁面1,那麼當您向右滑動時,頁面2也已創建,以加快分頁速度。

爲了進一步幫助您,請告訴我們NewsFragment的代碼。

此外,您可能會考慮使用FragmentPagerAdapter而不是FragmentStatePagerAdapter,因爲您似乎有固定數量的選項卡(在本例中爲5),並且根據FragmentPagerAdapter的用例文檔。從頁面

文檔我上面鏈接:

尋呼機的這個版本是最適合使用時通常有多個靜態片段極少數通過分頁,比如一組選項卡。

相關問題