我的应用有两个标签,并在标签之间切换,让我输入任何我输入的内容当前旅行所以我修改了我的代码以保存状态。
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
如何解决问题?
答案 0 :(得分:3)
您不需要setRetainInstance
,实际上根本不起作用。
按下标签会调用您的TabListener
,最有可能的是,您运行replace
交易,删除旧片段并丢弃其保存的数据。如果选项卡之前不存在(使用片段标记来确定),则应该add
,否则detach
/ attach
。一旦你这样做,你甚至不必手动保存文本,因为自动保存视图状态。