我有一个带有 FragmentTabHost 的片段活动。我使用以下代码将片段添加到选项卡:
mTabHost.addTab(mTabHost.newTabSpec(tab1Name).setIndicator(tabIndicator1),
EventSettingsStep1Fragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec(tab2Name).setIndicator(tabIndicator2),
EventSettingsStep2Fragment.class, null);
当我切换到不同的选项卡时,我想保留所有值(视图状态等),以便在切换回选项卡时拥有相同的数据。
我覆盖了 onSaveInstanceState 方法并在其中添加了我想要保留到包中的值。
我运行了被调用的方法,我有以下内容:
从 Tab1 切换到 Tab2:Tab1:onPause 然后 Tab2:onCreateView, Tab2:onResume
从 Tab2 切换到 Tab1:Tab2:onPause 然后 Tab1:onCreateView, Tab1:onResume
onSaveInstanceState 没有被调用。
这是我的片段之一的代码:
public class EventSettingsStep1Fragment extends Fragment implements View.OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "onCreateView");
if (savedInstanceState != null) {
Log.d(TAG, "restoring onSavedInstanceState");
Gson gson = new Gson();
event = gson.fromJson(savedInstanceState.getString("event"), Event.class);
}
if (event != null) {
//set views
}
return v;
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
@Override
public void onSaveInstanceState(Bundle outState) {
Log.d(TAG, "onSaveInstanceState");
super.onSaveInstanceState(outState);
Gson gson = new Gson();
outState.putString("event", gson.toJson(event));
}
}
为什么不调用 onSaveInstanceState?是不是只能通过 FragmentActivity 触发?