2013-03-22 72 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