[英]ViewPager with fragments: crash after orientation change (incorrect fragment displayed)
我有一個帶有PagerTitleStrip的ViewPager,它可以繪制片段。 每個片段都有一個StableArrayAdapter,它將信息填充到片段中。
方向更改后,當我單擊片段時,出現崩潰: java.lang.IndexOutOfBoundsException: Index: 8, Size: 7
產生方向更改后,我可以看到與方向更改之前相同的片段頁面。 但是,如果我單擊它,則會導致崩潰,因為viewpager可能已加載了第一個片段而不是所選片段。
似乎在產生方向更改時,正在重新創建活動(我想要它,因為我希望從admob生成的智能橫幅以新寬度重新創建),但是該片段可能沒有被重新創建或類似的東西,所以它可能指向了與塗漆的碎片不同
如何避免此崩潰? 也許有一種方法可以告訴Viewpager它必須加載正在顯示的頁面? 那怎么辦?
我嘗試存儲當前的片段號並在重新創建時選擇它,但是崩潰仍然在發生:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt("current_item", viewPager.getCurrentItem());
super.onSaveInstanceState(savedInstanceState);
}
.
.
.
//code in onCreate()
viewPager.setAdapter(collectionPagerAdapter);
if (savedInstanceState != null) {
int currentItem = savedInstanceState.getInt("current_item");
viewPager.setCurrentItem(currentItem);
}
這是我的xml布局。
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="3dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toTopOf="@+id/adView">
<android.support.v4.view.PagerTitleStrip
android:id="@+id/pager_title_strip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:paddingTop="4dp"
android:paddingBottom="4dp"
style="@style/CustomPagerTitleStrip"/>
</android.support.v4.view.ViewPager>
這是StableArrayAdapter中崩潰的行,其中用行填充了片段
Override public long getItemId(int position) {
return Math.abs(getItem(position).hashCode());
}
您可以通過下面的鏈接,他們解釋了如何處理Fragments和viewPager方向更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.