私は2つを保持するViewPager(extends FragmentPagerAdapter)を持っていますFragments。必要なのは、それらの間をスワイプしたときにListView、それぞれを更新することです。Fragmentこのために、ViewPager.OnPageChangeListenerインターフェイス(つまりonPageScrollStateChanged)を実装しました。Fragmentsへの参照を保持するために、を使用しHashTableます。Fragmentsinメソッドへの参照を格納HashTableします。getItem()
@Override
public Fragment getItem(int num) {
if (num == 0) {
Fragment itemsListFragment = new ItemsListFragment();
mPageReferenceMap.put(num, itemsListFragment);
return itemsListFragment;
} else {
Fragment favsListFragment = new ItemsFavsListFragment();
mPageReferenceMap.put(num, favsListFragment);
return favsListFragment;
}
}
Fragmentしたがって、あるトリガーから別のトリガーにスワイプすると、両方で必要なメソッドを呼び出すためonPageScrollStateChangedにを使用するトリガー(更新):HashTableFragments
public void refreshList() {
((ItemsListFragment) mPageReferenceMap.get(0)).refresh();
((ItemsFavsListFragment) mPageReferenceMap.get(1)).refresh();
}
orientation changeイベントが発生するまで、すべてがうまくいきます。refresh()その後、メソッドのコードは次のようになります。
public void refresh() {
mAdapter.changeCursor(mDbHelper.getAll());
getListView().setItemChecked(-1, true); // The last row from a exception trace finishes here (my class).
}
結果IllegalStateException:
java.lang.IllegalStateException: Content view not yet created
at android.support.v4.app.ListFragment.ensureList(ListFragment.java:328)
at android.support.v4.app.ListFragment.getListView(ListFragment.java:222)
at ebeletskiy.gmail.com.passwords.ui.ItemsFavsListFragment.refresh(ItemsFavsListFragment.java:17)
Contentビューが実際に作成されていないと仮定して、メソッドのboolean変数をに設定し、条件を使用して呼び出すかどうかを指定しました。これにより、アクティビティビューとコンテンツビューが正常に作成されたことがわかります。onActivityCreated()trueif/elsegetListView()
次に、デバッグを行って、いつFragmentPagerAdapter呼び出されるかを確認しましたが、イベントgetItem()後にメソッドが呼び出されません。したがって、oldへの参照を保持しているorientation changeように見えます。これは私の仮定です。ViewPagerFragments
それで、私が現在への適切な参照を使用できるように、を再度ViewPager呼び出すように強制する方法はありますか?他の解決策かもしれませんか?どうもありがとうございます。getItem()Fragments