当我的Fragment被销毁时,我需要保存一些成员变量。但是,研究表明,片段变量不会像活动那样保存onSaveInstanceState
。因此,我无法保存这些变量。
我的片段是PageViewer的一部分,因此我无法弄清楚如何store the Fragments in the Bundle of the Activity's onSaveInstanceState
(我没有明确定义片段,因为他们'在PageViewer Adapter中重新创建!)
我已经看到它建议我使用Fragment Arguments
来存储这些变量,但是当我在Arguments包上调用containsKey
时,我总是得到false
。
有什么建议在他们调用onStop
时保存Fragments的成员变量?
这是我的片段onCreateView
public FinalCalcFragment(){
setArguments(new Bundle());
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(
R.layout.activity_grade_calculator, container, false);
Bundle args = getArguments();
if(args.containsKey("visYes")){
firstLoad = args.getBoolean(PERSISTENT_FIRSTLOAD_BUNDLE_KEY);
System.out.println("contains the key");
}
context = this.getActivity();
if(firstLoad) { //This is so that I don't reset my views when recreating.
bindAll();
setInitialViews();
setListeners();
}
firstLoad = false;
return rootView;
}
以下是我的onPause
和onSaveInstanceState
。我试着在两者中存储我的论点,但都没有奏效。
@Override
public void onPause(){
super.onPause();
getArguments().putBoolean(PERSISTENT_FIRSTLOAD_BUNDLE_KEY, firstLoad);
getArguments().putBoolean("visYes", ((TextView) rootView.findViewById(R.id.tv_grade_calc_result)).isShown());
}
@Override
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
getArguments().putBoolean(PERSISTENT_FIRSTLOAD_BUNDLE_KEY, firstLoad);
getArguments().putBoolean("visYes", ((TextView) rootView.findViewById(R.id.tv_grade_calc_result)).isShown());
}
这是我的适配器getItem
方法的摘录。
@Override
public Fragment getItem(int i) {
//System.out.println("We are trying to get item " + i);
switch(i) {
case 0:
Fragment fragment = new FinalCalcFragment();
return fragment;
答案 0 :(得分:0)
您应该使用Bundle outState来保存片段实例状态,就像活动一样。更改getArguments()返回的参数无效。 然后在onCreateView中首先检查传递的savedInstanceState。如果savedInstanceState不为null,则使用它,如果为null,则使用getArguments()返回的Bundle。