短縮版:
ViewPager を持つアクティビティがあります。ViewPager の内部には 3 つのフラグメントがあります。Parcelable を実装してバンドル内に格納することで、フラグメント内にデータを格納しています。
ここで問題は、データをどこに復元するかです。(私が知っていることから) 画面を回転するたびに ViewPager がフラグメントの新しいインスタンスを作成しているため、私は混乱しています。(新しいアクティビティが作成されます -> 新しい ViewPager -> 新しいフラグメント)。私が間違っている場合は、私を修正してください。
長いバージョン:
MainActivity 内の私の ViewPager
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new ForecastFragmentPageAdapter(getSupportFragmentManager(),
ForecastActivity.this));
viewPager.setOffscreenPageLimit(2);
マイ FragmentPagerAdapter
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new NowForecastFragment();
} else if (position == 1) {
return new HourlyForecastFragment();
} else {
return new DailyForecastFragment();
}
}
フラグメントの 1 つに状態を保存する
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save data source
if (nowDataList != null) {
outState.putParcelableArrayList("savedNowDataList", nowDataList);
}
}
前もって感謝します!
アップデート:
同様の問題に投稿された他の解決策によると、setRetainInstance(true);も追加しました。私のフラグメントのonCreateViewで。そして、これは私が状態を保存して復元する方法です:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save data source
if (nowDataList != null) {
Log.v("---------------->","saved!");
outState.putParcelableArrayList("savedNowDataList", nowDataList);
}
}
そしてonCreateViewで復元する
if(savedInstanceState!=null) {
Log.v("---------------->","restored!");
nowDataList = savedInstanceState.getParcelableArrayList("savedNowDataList");
nowForecastAdapter.notifyDataSetChanged();
}
両方のログがトリガーされていることがわかります。データが復元されないのはなぜですか?