我的viewPager有5个ListFragment。
选择列表项时,转到DetailFragment。
返回后,autoScroll在Listview上记录位置。
autoScrooll方法是这样的,在onStart();
中调用getListView.setSelection(position);
但这有问题。
ViewPager在Fragment1时创建Fragment2。
当Fragment2尚未显示时,和Fragment2调用onStart()。
所以,Fragment2会滚动最后一个位置,但显示Fragment还是Fragment1。
因此,App因异常而崩溃。
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)片段显示。
请帮忙。
答案 0 :(得分: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();
}
然后在每个ListFragments
中写入onUpdateView()的主体public void onUpdateView()
{
getListView.setSelection(position);
}