Reputation: 3055
My viewPager have 5 ListFragment.
when List item selected, goto DetailFragment.
after back ,autoScroll recorded position on Listview.
autoScrooll method is like this , this is called in onStart();
getListView.setSelection(position);
but this has problem.
ViewPager create Fragment2 when Fragment1.
and Fragment2 call onStart() when Fragment2 has yet to be display.
so,Fragment2 will scroll last position, but displayed Fragment is Fragment1 yet.
Consequently, App crashed by Exception.
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)
so, I want call getListview.setSelection(position) only Fragment display completely.
please help.
Upvotes: 1
Views: 1354
Reputation: 6441
First you Implement OnPageChangeListener for Activity. After that you will handle ListFragments working on these functions,
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();
}
then write body of onUpdateView(), inside of each ListFragments
public void onUpdateView()
{
getListView.setSelection(position);
}
Upvotes: 1