私は2つを保持するViewPager
(extends FragmentPagerAdapter
)を持っていますFragments
。必要なのは、それらの間をスワイプしたときにListView
、それぞれを更新することです。Fragment
このために、ViewPager.OnPageChangeListener
インターフェイス(つまりonPageScrollStateChanged
)を実装しました。Fragment
sへの参照を保持するために、を使用しHashTable
ます。Fragments
inメソッドへの参照を格納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
にを使用するトリガー(更新):HashTable
Fragments
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()
true
if/else
getListView()
次に、デバッグを行って、いつFragmentPagerAdapter
呼び出されるかを確認しましたが、イベントgetItem()
後にメソッドが呼び出されません。したがって、oldへの参照を保持しているorientation change
ように見えます。これは私の仮定です。ViewPager
Fragments
それで、私が現在への適切な参照を使用できるように、を再度ViewPager
呼び出すように強制する方法はありますか?他の解決策かもしれませんか?どうもありがとうございます。getItem()
Fragments