で構成の変更から回復するのに本当に苦労していますViewPager。
私が望むのは、現在のページャーの位置を保存して、構成の変更後に同じページが表示されるようにすることです。そのために、 を使用して保存pager.getCurrentItem()および復元しpager.setCurrentItemます。これは機能しません。setCurrentItem実際には、そのページを選択するのではなく、再作成しようとします! そして、それはページがすでに作成されているにもかかわらずです。
setCurrentItemそれを支えているアダプターを実装するときに何かを見逃したかどうかはわかりませんが、ViewPager完全に構築されていると思われる落とし穴はありますか? ただし、その関数のコードを見ると、意味がありません。アイテムがまったくない場合を除いて、常にページを再作成しようとするようです:
void setCurrentItemInternal(int item, boolean smoothScroll, boolean always, int velocity) {
// these are the only checked that make this method return
if (mAdapter == null || mAdapter.getCount() <= 0) {
setScrollingCacheEnabled(false);
return;
}
if (!always && mCurItem == item && mItems.size() != 0) {
setScrollingCacheEnabled(false);
return;
}
// ... removed some init code
mCurItem = item;
populate();
// ...
}
ご覧のとおりpopulate()、アイテムがまったくない場合、または選択しようとしているアイテムが既に選択されている場合を除いて、 は常に呼び出されます。何を与える?それは私には意味がありません。