Сохранение EditText в пакете и восстановление его при изменении макета


Я создал 2 различных макета для одного и того же фрагмента. Один - для Portrait, а второй - для Landscape. У меня есть поле EditText, содержимое которого я хочу передать, если я изменю ориентацию, поэтому макет переключается. Значение сохраняется и распечатывается в журнале.d Когда onViewCreated вызывается, но не задается в поле EditText. Я также заметил, что он сохраняется только в первый раз, и при каждом изменении пачка умножается. Любые другие входные данные во время выполнения игнорируются.

Следующее выход:

02-07 10:26:15.100 9968-9968/parohyApps.antdiary D/NewData: Bundle string > hi
02-07 10:26:18.780 9968-9968/parohyApps.antdiary I/System.out: 2131492950
02-07 10:26:23.300 9968-9968/parohyApps.antdiary D/NewData: Bundle string > hi
02-07 10:26:23.340 9968-9968/parohyApps.antdiary D/NewData: Bundle string > hi
02-07 10:26:24.430 9968-9968/parohyApps.antdiary W/IInputConnectionWrapper: getExtractedText on inactive InputConnection
02-07 10:26:25.570 9968-9968/parohyApps.antdiary W/IInputConnectionWrapper: getExtractedText on inactive InputConnection
02-07 10:26:32.380 9968-9968/parohyApps.antdiary D/NewData: Bundle string > hi
02-07 10:26:32.400 9968-9968/parohyApps.antdiary D/NewData: Bundle string > hi
02-07 10:26:32.430 9968-9968/parohyApps.antdiary D/NewData: Bundle string > hi
02-07 10:26:32.550 9968-9968/parohyApps.antdiary I/Choreographer: Skipped 78 frames!  The application may be doing too much work on its main thread.

Код:

public class NewData extends Fragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

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

    return view;
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    if(savedInstanceState != null){
        Log.d("NewData", "Bundle string > " + savedInstanceState.getString("outString", "NO STRING"));
        EditText name = (EditText) view.findViewById(R.id.et_name);
        name.setText(savedInstanceState.getString("outString", 
                                                   "NO STRING"));
    }

}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    EditText name = (EditText) getActivity().findViewById(R.id.et_name);
    outState.putString("outString",name.getText().toString());
   }
}
1 2

1 ответ:

Я думаю, что вам нужно сохранить ваш фрагмент в onSaveInstanceState и onRestoreInstanceState вашей деятельности, например:

Сохранить Фрагмент

public void onSaveInstanceState(Bundle outState){
   getFragmentManager().putFragment(outState,"yourFragment",yourFragment);
}

Восстановить Фрагмент

public void onRestoreInstanceState(Bundle inState){
    yourFragment = getFragmentManager().getFragment(inState,"yourFragment");
}