0

我正在使用FragmentActivity和ViewPager來顯示幾個片段。我想根據傳遞給FragmentActivity的意圖每次顯示不同的片段。但問題是當我在setAdapter()之後使用setCurrentItem()時,第一個片段將會始終創建,我如何避免這種情況?如何避免在setCurrentItem之前創建第一個片段?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.container_page); 

    mDemoCollectionPagerAdapter = new FragmentPageAdapter(
      getSupportFragmentManager()); 

    mViewPager = (ViewPager)findViewById(R.id.pager); 

    mViewPager.setAdapter(mDemoCollectionPagerAdapter); 

    Intent intent = getIntent(); 
    int whichFragment = intent.getIntExtra(Constants.EXTRA_WHICH_FRAGMENT, 0); 

    mViewPager.setCurrentItem(whichFragment, false); 
    setActionBarTitle(whichFragment); 

    mViewPager.setOnPageChangeListener(this); 
} 

回答

0

您可以刪除從adapter..and前面的片段添加它們之後..

不要忘記調用notifyDataSetChanged()添加其他fragments..Otherwise後,你會得到一個異常

你也可能需要在適配器中覆蓋此方法getItemPosition()以返回所有片段的增加位置。

0

該應用可能會花費一些時間來檢索你的額外,所以他膨脹你的第一個片段。

嘗試setAdapter()之前把這個:

Intent intent = getIntent(); 
int whichFragment = intent.getIntExtra(Constants.EXTRA_WHICH_FRAGMENT, 0); 

然後,setAdapter之後,設置當前項目。

+0

嘗試過,但沒有工作 – Paparika

+0

對不起,但讓我看看我是否明白,你希望你的片段請求的意圖是先創建而不是第一個片段?我假設這是出於性能原因。你嘗試過adapter.setPrimaryItem(容器,位置,對象)嗎? –

+0

我在另一個Activity中有3個按鈕,當我按下其中一個按鈕時,會創建FragmentActivity並顯示不同的片段,並且是有性能問題,第一個片段有很多工作要做,所以當需要第二個片段時,的時間花費在準備1st片段上。但似乎系統會預加載其他片段以獲得更好的用戶體驗(當片段間滑動時),所以也許我應該嘗試優化第一個片段? – Paparika

相關問題