1

我的 viewPager 有 5 个 ListFragment。

选择列表项时,转到 DetailFragment。

返回后,自动滚动记录在 Listview 上的位置。

autoScroll 方法是这样的,在 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) 只显示片段。

请帮忙。

4

1 回答 1

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);
}
于 2013-03-23T12:13:39.907 回答