1

我有一個ActionBarActivity其中我有一個ViewPager。我期望在四頁(第一,第二,第三,第四頁)中看到四個(第一,第二,第三,四)碎片。FragmentPagerAdapter在ViewPager中顯示錯誤的片段

問題:

  • 我看到的第一頁上的第二個片段。
  • 然後我轉到第二頁。一無所獲。
  • 然後我回到第一頁。看到第二個片段。

ActionBarActvityonCreate(),我有:

mViewPager = (ViewPager) findViewById(R.id.pager); 
mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), mGoodArrayListOfWords); 
mViewPager.setAdapter(mPagerAdapter); 

這是怎麼MyPagerAdapter如下:

public class MyPagerAdapter extends FragmentPagerAdapter { 

    private ArrayList<String> mWords; 


    public MyPagerAdapter(FragmentManager fm, ArrayList<String> words) { 
     super(fm); 
     mWords = words; 
    } 


    @Override 
    public Fragment getItem(int position) { 
     String specificWord = mWords.get(position); 
     return MyFragment.newInstance(specificWord); 
    } 

    @Override 
    public int getCount() { 
     return mWords.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mWords.get(position); 
    } 
} 

我使用靜態工廠方法實例化一個MyFragment和我做了沒有-arg構造函數私有:

public static MyFragment newInstance(String word) { 
     MyFragment fragment = new MyFragment(); 
     Bundle args = new Bundle(); 
     args.putString("WORD", word); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    private MyFragment() { 
     super(); 
    } 

此外,在onViewOnCreated()中,我得到了片段列表視圖的句柄,使用LoaderManagerinit()加載器。我更新了LoaderManager.LoaderCallbacks<Cursor>onLoadFinished()列表視圖的適配器。

我認爲這個問題是由於Loader在碎片視圖創建後完成了他們的工作。

04-01 23:15:55.707 D/DebugTag﹕ getItem called 
04-01 23:15:55.717 D/DebugTag﹕ getItem called 
04-01 23:15:55.717 D/DebugTag﹕ on view created called 
04-01 23:15:55.797 D/DebugTag﹕ on view created called 
04-01 23:15:56.157 D/DebugTag﹕ on load finished called 
04-01 23:15:56.177 D/DebugTag﹕ on load finished called 
+0

我將'onViewCreated'中的所有代碼移至'onCreateView'。一切正常。 – Jonas 2015-04-02 07:12:51

回答

0

擴展FragmentStatePagerAdapter爲你使用getItem()方法:當我想到兩頁,兩個片段記錄。如果您想保留FragmentPagerAdapter覆蓋instantiateItem()

+0

我也試過FragmentStatePagerAdapter;但它給了我相同的行爲。 – Jonas 2015-04-01 14:36:18

+0

嘗試重寫'instantiateItem()'並從那裏調用你的片段 – Ryan 2015-04-01 14:39:26

+0

thx我懷疑問題是,當我在第一頁上時,我有一個帶有空列表視圖的片段,然後由第一個加載器帶回的內容是由第二個裝載機帶回的重載... – Jonas 2015-04-01 15:34:03