片段setRetainInstance不工作(支持Android LIB) [英] Fragment setRetainInstance not works (Android support lib)
问题描述
可能重复:结果
<一href=\"http://stackoverflow.com/questions/12901760/android-fragments-setretaininstancetrue-not-works-android-support-library\">Android片段setRetainInstance(真)不工作(Android的支持库)
我写了一个简单的测试项目,但我不能明白,为什么我总是收到savedInstanceState = NULL的生命周期方法的onCreate,onCreateView和onActivityCreated。我改变屏幕的方向,看到了日志,但状态不保存。
请告诉我哪里是我的错误。
谢谢。
片段类的code是:
I wrote a simple test project, but I cant understand why I always receive savedInstanceState = null in lifecycle methods onCreate, onCreateView and onActivityCreated. I change the screen orientation, see the log, but state not saved. Tell me please where is my mistake. Thanks. The code of fragment class is:
public class TestFragment extends Fragment {
private String state = "1";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (savedInstanceState != null) {
//never works
state = savedInstanceState.getString("state");
}
//always prints 1
Toast.makeText(getActivity(), state, Toast.LENGTH_SHORT).show();
return inflater.inflate(R.layout.fragment_layout, container, false);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("state", "2");
Log.e("", "saved 2");
}
}
修改
当我尝试使用setRetainInstance我又没有结果(((我用BTN1改变状态2,但改变方向后,我看到1时BTN2 pressing。请帮助(
When i try to use setRetainInstance i have no result again((( I change a state to 2 using btn1, but after changing orientation i see 1 when pressing on btn2. Help please(
公共类TestFragment扩展片段{
public class TestFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
setRetainInstance(true);
super.onCreate(savedInstanceState);
}
private String state = "1";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout, container, false);
//button for changing state
((Button)view.findViewById(R.id.button1)).setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
state = "2";
}
});
//button for showing state
((Button)view.findViewById(R.id.button2)).setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
Toast.makeText(getActivity(), state, Toast.LENGTH_SHORT).show();
}
});
return view;
}
}
推荐答案
我已经看到了同样的问题。但是你可以保存instate状态的另一种方式,由于方法setRetainInstance(真),所有的类数据会自动保存。
I have seen the same issue. But you can save the instate state in an other way, thanks to the method setRetainInstance(true), all your class data are saved automatically.
@Override
public void onCreate(Bundle savedInstanceState) {
setRetainInstance(true);
super.onCreate(savedInstanceState);
}
修改
时,尝试声明你的活动也添加这些PARAMS:
Try to also add these params when you declare your activities :
<activity
android:name="MyActivity"
android:configChanges="orientation|keyboardHidden|screenSize" />
这篇关于片段setRetainInstance不工作(支持Android LIB)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!