1

私のviewPagerには5つのListFragmentがあります。

リスト項目が選択されている場合は、DetailFragment に移動します。

戻ると、autoScroll は Listview の位置を記録しました。

autoScroll メソッドはこのようなもので、これは 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) を呼んで Fragment だけを完全表示させたい。

助けてください。

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 に答える