保存并恢复片段状态

时间:2016-09-27 09:50:13

标签: android android-fragments

我有一系列片段。我使用"之前的#34;和" next"在这个片段中导航的按钮。这些片段中有许多编辑文本和单选按钮。

我希望通过点击"之前的"加载前一个片段,保存并恢复这些编辑文本和单选按钮中的用户输入。按钮。

Screeshots:
Fragment 1

Fragment 2

片段1:

public class Register_Page6 extends Fragment {
public Register_Page6() {}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_register_page6, container, false);

    Button Previous = (Button) view.findViewById(R.id.Previous6);
    Button Next = (Button) view.findViewById(R.id.Next6);
    Next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            android.support.v4.app.FragmentTransaction FT;
            FT = getActivity().getSupportFragmentManager().beginTransaction();
            FT.replace(R.id.main_container,new Register_Page7());
            FT.commit();
        }
    });

    Previous.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            android.support.v4.app.FragmentTransaction FT;
            FT = getActivity().getSupportFragmentManager().beginTransaction();
            FT.replace(R.id.main_container,new Register_Page5());
            FT.commit();
        }
    });
    return view;
}
}

片段2:

public class Register_Page7 extends Fragment {
public Register_Page7(){

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_register_page7, container, false);

    Button Previous = (Button) view.findViewById(R.id.Previous7);
    Button Regiter = (Button) view.findViewById(R.id.Submit);
    Regiter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
    android.support.v4.app.FragmentTransaction FT;
            FT = getActivity().getSupportFragmentManager().beginTransaction();
            FT.replace(R.id.main_container,new Register_Page6());
            FT.commit();
        }
    });

    Previous.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            android.support.v4.app.FragmentTransaction FT;
            FT = getActivity().getSupportFragmentManager().beginTransaction();
            FT.replace(R.id.main_container,new Register_Page6());
            FT.commit();
        }
    });
    return view;
}
}

2 个答案:

答案 0 :(得分:2)

在您的所有片段中使用addToBackStack("YOUTAG")将您的片段添加到后台堆栈:

android.support.v4.app.FragmentTransaction FT;
FT = getActivity().getSupportFragmentManager().beginTransaction();
FT.replace(R.id.main_container, new Register_Page6()).addToBackStack("FragmentName");
FT.commit();

答案 1 :(得分:0)

如果你有一系列片段,如果你将它们添加到backstack,那将是内存浪费。 对于这种动作,android提供了一个名为ViewPager的东西,它总是一次存储2个片段,并在需要时动态创建剩余的片段。

因此,如果您仍然决定不想使用ViewPager,则可以将Fragment的数据存储在activity的包中,并且可以在再次创建片段时检索数据