DialogFragment - 初始值设定和旋转后保持状态。(DialogFragment -

2019-09-21 04:12发布

我创建了正在建设,并从onCreateDialog方法返回AlertDialogDialogFragment。 在AlertDialog包含两个EditText上的意见。

我设置在onCreateDialog方法,直到我转动电话,所有的变化迷路伟大的工程这两个编辑文本的初始值/恢复到初始值,因为onCreateDialog被调出。

所以我的问题是我应该把初始值,因此它们只设置你第一次打开对话框,如果你已经做了修改和旋转手机,我保留最后状态retached?

下面我粘贴简化我的代码版本。 一种解决方案可以在可以的newInstance初始化类属性()方法,但后来我需要让他们静。 其它解决方案可以通过捆绑来传递值,但是没有放的方法采取日历作为参数类型。

什么是最好的做法?

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

}

Answer 1:

您可以在存储的onSaveInstanceState(捆绑outState)方法您的数据,并在onRestoreInstanceState再次阅读()方法。 会的onSaveInstanceState屏幕旋转之前onRestoreInstanceState()改变之后被调用,。 这是存储方向变化之间数据的好地方。

或者你也可以加在清单文件

android:configChanges="orientation"

添加此值activitiy,其中包含您alertDialog。



Answer 2:

CalendarSerializable ,所以你可以把它看成是在Bundle



文章来源: DialogFragment - setting initial values and retaining state after rotation