2013-03-22 66 views
0

我的viewPager有5個ListFragment。ViewPager中片段顯示時的調用方法

當選擇列表項時,轉到DetailFragment。

後面,autoScroll在Listview上記錄位置。

autoScrooll方法是這樣的,這在onStart()中被調用;

getListView.setSelection(position); 

但這有問題。

ViewPager當Fragment1創建Fragment2時。

和Fragment2當Fragment2尚未顯示時調用onStart()。

所以,Fragment2會滾動上一個位置,但顯示Fragment還是Fragment1。

因此,應用程序由異常崩潰。

03-22 09:39:23.711: E/AndroidRuntime(15404): java.lang.IllegalStateException: Content view not yet created 
03-22 09:39:23.711: E/AndroidRuntime(15404): at android.support.v4.app.ListFragment.ensureList(ListFragment.java:328) 
03-22 09:39:23.711: E/AndroidRuntime(15404): at android.support.v4.app.ListFragment.getListView(ListFragment.java:222) 

所以,我只想調用getListview.setSelection(position)完全分段顯示。

請大家幫忙。

回答

1

首先爲Activity實現OnPageChangeListener。 那之後,你就處理ListFragments這些功能的工作,

public void onPageScrollStateChanged(int arg0) 
{ 
} 
public void onPageScrolled(int arg0, float arg1, int arg2) 
{ 
} 
public void onPageSelected(int position) 
{ 
    if(position==0) 
      ((ListFragment1)mPagerAdapter.getItem(position)).updateView(); 
//onUpdateView is a user defined public function on ListFragment that works what you need 
else if(position==1) 
      ((ListFragment2)mPagerAdapter.getItem(position)).updateView(); 
else if(position==2) 
    ((ListFragment3)mPagerAdapter.getItem(position)).updateView(); 
else if(position==3) 
      ((ListFragment4)mPagerAdapter.getItem(position)).updateView(); 
else if(position==4) 
      ((ListFragment5)mPagerAdapter.getItem(position)).updateView(); 
} 

然後寫onUpdateView()的車身,內部各ListFragments

public void onUpdateView() 
{ 
    getListView.setSelection(position); 
} 
+0

viewpager不投ListFragment1 ....錯誤 – dmnlk 2013-03-25 04:15:33

+0

對不起,我錯誤,我已經編輯了答案。請嘗試... – 2013-03-25 07:09:46