Fragment
ローテーション中のデータ読み込みに時間がかかるのを避けたい。
public class WatchlistFragment extends SherlockListFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState == null) {
data = getTimeConsumingData();
} else {
Log.i(TAG, "savedInstanceState is not null!");
// Avoid performing time consuming data operation during rotation changes.
// But I never have chance to reach here !?!?
data = savedInstanceState.getStringArray("data");
}
setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, data));
}
public String[] getTimeConsumingData() {
Log.i(TAG, "WatchlistFragment getTimeConsumingData");
return new String[] { "A", "B", "C"};
}
@Override
public void onSaveInstanceState(Bundle outState) {
Log.i(TAG, "WatchlistFragment onSaveInstanceState");
super.onSaveInstanceState(outState);
outState.putStringArray("data", data);
}
private String[] data = null;
private static final String TAG = WatchlistFragment.class.getSimpleName();
}
不思議なことに、何度かローテーションを行ってもsavedInstanceState
inonActivityCreated
は常に null です。
注意してください、setRetainInstance(true)
説明されているように使用しないことを好みますAndroid Fragments Retaining Data 作成者は を使用してonSaveInstanceState
います。なぜ私のものがうまくいかないのかわからないというだけです。