繁体   English   中英

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

[英]What's calling method when Fragment Display in ViewPager

我的viewPager有5个ListFragment。

当选择列表项时,转到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)。

请帮忙。

首先,您为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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM