I want to avoid time consuming data loading during Fragment
rotation.
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();
}
Strangely, savedInstanceState
in onActivityCreated
is always null even I perform several rotation.
Note, I prefer not to use setRetainInstance(true)
as described Android Fragments Retaining Data The author is using onSaveInstanceState
. Just that I'm not sure why mine doesn't work.