Я создал DialogFragment, который создает и возвращает AlertDialog из метода onCreateDialog. AlertDialog содержит два представления EditText.
Я устанавливаю начальные значения этих двух текстов редактирования в методе onCreateDialog, который отлично работает, пока я не поверну телефон, и все изменения не будут потеряны/восстановлены до начальных значений, потому что onCreateDialog вспоминается.
Итак, мой вопрос: где я должен разместить начальные значения, чтобы они устанавливались только при первом открытии диалогового окна, и если вы внесли изменения и повернули свой телефон, последнее состояние, которое я сохранил и снова прикрепил?
Ниже я вставил упрощенную версию моего кода. Одним из решений может быть инициализация атрибутов класса в методе newInstance(), но тогда мне нужно сделать их статическими. Другим решением может быть передача значений через Bundle, но никакие методы ввода не принимают Calendar в качестве типа параметра.
Что такое лучшая практика?
public class MyDialogFragment extends DialogFragment implements OnClickListener, OnDateSetListener, OnQuantitySetListener
{
private EditText editText1, editText2
private MyObject myObject;
public static MyDialogFragment newInstance()
{
return new MyDialogFragment ();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater factory = LayoutInflater.from(getActivity());
final View v = factory.inflate(R.layout.my_layout, null);
editText1 = (EditText) v.findViewById(R.id.text1);
editText2 = (EditText) v.findViewById(R.id.text2);
myObject = <get the object from database>;
editText1.setText(myObject.attribute1);
editText2.setText(myObject.attribute2);
bindDataToViews();
return new AlertDialog.Builder(getActivity())
.setIconAttribute(R.drawable.add)
.setTitle("Title of the dialog")
.setView(v)).create();
}
... other methods using getting the values from EditText and putting them back to MyObject
}