我已经阅读了很多关于数据保存实例和恢复的内容但是在我的情况下无法实现。我的申请案例是什么?
因此,通过这种方式,我在MainActivity中有2个片段,这些片段一次在屏幕上显示给用户
**我想要什么**
**问题和困惑**
我不知道如果我设置Fragment.setRetainInstance(true)那么我的片段是否仍然可以接收onConfiguration Change回调?
当我旋转我的设备时,片段会重新初始化,而且我的活动还有Asynctask并再次运行,我希望我的活动保存相同的数据。我怎样才能做到这一点?
请帮帮我,给我一些提示。
答案 0 :(得分:0)
要在配置更改时保存片段状态,请使用
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt(FIRST_NAME_VALUE_KEY, firstNameTextView.getText());
outState.putInt(LAST_NAME_VALUE_KEY, lastNameTextView.getText());
super.onSaveInstanceState(outState);
}
并且用于将状态写回片段使用中的视图
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment, container, false);
if (savedInstanceState != null) {
String firstName = savedInstanceState.getInt(FIRST_NAME_VALUE_KEY);
String lastName = savedInstanceState.getInt(LAST_NAME_VALUE_KEY);
firstNameTextView.setText(firstName);
lastNameTextView.setText(lastName);
}
return view;
}
您将通过保留activity来接收onConfigurationChanged()回调。它与Fragment.setRetainInstance(true)无关。
为了避免再次运行asynctask,我们可以使用活动内部的以下回调来存储数据并保留它。
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
// Save custom values into the bundle
savedInstanceState.putInt(SOME_VALUE, someIntValue);
savedInstanceState.putString(SOME_OTHER_VALUE, someStringValue);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
在onCreate(Bundle savedInstanceState)回调中,您可以检查savedInstanceSate,根据您可以调用u asynctask或保留值如下所示
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
asyncTask.execute();
} else {
someIntValue = savedInstanceState.getInt(SOME_VALUE);
someStringValue = savedInstanceState.getString(SOME_OTHER_VALUE);
}
}