保存实例以避免丢失选项卡之间的数据

时间:2013-07-30 20:42:53

标签: java android android-fragments

我的应用有两个标签,并在标签之间切换,让我输入任何我输入的内容当前旅行所以我修改了我的代码以保存状态。

enter image description here

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());
}
}

始终显示

  

DIDN' tVE

如何解决问题?

1 个答案:

答案 0 :(得分:3)

您不需要setRetainInstance,实际上根本不起作用。

按下标签会调用您的TabListener,最有可能的是,您运行replace交易,删除旧片段并丢弃其保存的数据。如果选项卡之前不存在(使用片段标记来确定),则应该add,否则detach / attach。一旦你这样做,你甚至不必手动保存文本,因为自动保存视图状态。