1

我的应用程序有两个选项卡并在选项卡之间切换,这让我丢失了我在当前行程中输入的任何内容所以我修改了我的代码以保存状态。

在此处输入图像描述

package com.test.testing;


public class Trip2 extends Fragment {
     EditText nameOfInf;    
    @Override
    public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) {

        if ((savedInstanceState != null) && (savedInstanceState.getString("nameof") != null)) {
            Toast.makeText(getActivity(), savedInstanceState.getString("nameof"),2000).show();
        }
        else {
            Toast.makeText(getActivity(), "DIDNT SAVE",2000).show();
        }
        final RelativeLayout mFrame2 =  (RelativeLayout) inflater.inflate( R.layout.trip, container, false ); 

        final Button btnCalc = (Button) mFrame2.findViewById(R.id.btnCalculate);

        nameOfInf = (EditText) mFrame2.findViewById(R.id.etName);
        final EditText tollAmount = (EditText) mFrame2.findViewById(R.id.etToll);

        btnCalc.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //DO SOMETHING
            }
        });
        return mFrame2;
    }
@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("nameof", nameOfInf.toString());
}
}

它总是显示

没有保存

我该如何解决这个问题?

4

1 回答 1

3

你不需要setRetainInstance,事实上那根本行不通。

发生的情况是,按下选项卡会调用您TabListener运行replace事务的位置,删除旧片段并丢弃其保存的数据。仅add当标签之前不存在(使用片段标签来确定)和detach/attach其他时才应。一旦你这样做了,你甚至不必手动保存文本,因为视图状态会自动保存。

于 2013-07-30T21:01:10.310 回答