在ViewPager中显示片段时的调用方法是什么

时间:2013-03-22 10:03:07

标签: android android-layout

我的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)片段显示。

请帮忙。

1 个答案:

答案 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);
}