片段事务时保存所有状态和视图

时间:2014-01-23 07:20:58

标签: java android android-fragments

我将片段用于我的应用程序,它们是:片段A,片段B和片段C。

从一个片段移动到另一个片段,我使用两个按钮,第一个按钮用于转发到下一个片段,第二个按钮用于返回上一个片段。

当我从一个片段移动到另一个片段(例如从A到B再到A再到B)时的问题。 Fragment B的EditText中的所有条目都将丢失并返回空白。这是片段A:

public class AFragment extends Fragment {
EditText text,text2;
public AFragment(){}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_a, container, false);
    ImageView next=(ImageView)rootView.findViewById(R.id.next);
    text=(EditText)rootView.findViewById(R.id.text);
    text2=(EditText)rootView.findViewById(R.id.text1);
    next.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

              getFragmentManager().beginTransaction().replace(R.id.frame_container, new TertanggungPolis()).addToBackStack("" + new BFragment().getId()).commit();


        }
    });
    return rootView;
}

我已经创建了保存方法onSaveInstanceState但是当我再次从ABAB进行片段事务时,我的片段B没有任何变化,fragment B只是创建了新视图,并且在我回到{之前输入的所有editext缺少{1}},这是我的片段B:

fragment A
请帮助我,因此我感到非常沮丧和压力。我希望有人能帮助我解决我的问题,非常感谢你

1 个答案:

答案 0 :(得分:0)

您必须像现在一样将状态保存到方法onSaveInstanceState()中的Bundle(添加@Override注释,因为您要覆盖现有方法)。您需要在onActivityCreated()方法中恢复状态。从Bundle加载值并将它们设置为EditText字段。 添加如下内容:

@Override
public void onActivityCreated(Bundle bundle) {
    super.onActivityCreated(bundle);
    if(bundle != null){
        //state can be restored
        //load values and set them to your view elements
        String loaded = bundle.getString("text 1");
        cut.setText(loaded);
    } else {
        //The fragment is created the first time and no state was saved before
    }
}

您还可以阅读life-cycle of Fragments