2016-09-27 5 views
2

У меня есть серия фрагментов. И я использую «предыдущие» и «следующие» кнопки для навигации по этим фрагментам. В этих фрагментах есть много текстов редактирования и радиокнопки.Сохранение и восстановление состояния фрагмента

Я хочу сохранить и восстановить пользовательский ввод в этих текстах редактирования и переключателях при загрузке предыдущего фрагмента нажатием на кнопку «предыдущая».

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; 
} 
} 
+0

Проверьте [Мой ответ здесь] (HTTP://stackoverflow.com/questions/39607821/app-crash-when-i-change-the-device-orientation/39607903#39607903) – Piyush

+0

@Piyush: Я не должен добавить это: "android: configChanges =" ориентация | screenSize | keyboardHideen " в мой код, 0? –

+0

Если вы хотите сохранить свои данные (состояние фрагмента) с изменением ориентации, то вам нужно добавить в файл манифеста для активности. – Piyush

ответ

1

Добавить свой Fragm лор обратно стек, используя 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(); 
+0

Thats it? Просто добавьте фрагменты в задний стек? Будет ли это восстанавливать состояние фрагмента, когда я нажимаю кнопку «Предыдущая»? –

+0

Да .. это сохранит значения .. Когда вы нажмете предыдущий, вам нужно 'popback()' стекать вручную, чтобы получить предыдущий фрагмент со всем его состоянием –

+0

Im confused. Не могли бы вы рассказать мне, что именно я должен делать, когда нажимаю кнопки «Далее» и «Предыдущие»? –

0

Если у вас есть ряд фрагментов, если добавить их к backstack было бы потеря памяти. Для такого вида действия Android предлагает нечто вроде ViewPager, которое всегда будет хранить сразу 2 фрагмента и динамически создавать остальные фрагменты при необходимости.

Так что, если вы все-таки решили, что вы не хотите использовать ViewPager, вы можете хранить данные фрагмента в пачке активность, и вы можете получить данные при повторном создании фрагмента

Смежные вопросы