我创建了一个 DialogFragment ,它正在构建并从 onCreateDialog 方法返回 AlertDialog 。 AlertDialog包含两个EditText视图。
我在 onCreateDialog 方法中设置这两个编辑文本的初始值,直到我旋转手机并且所有更改都丢失/恢复为初始值,因为 onCreateDialog 被召回。
所以我的问题是我应该在哪里放置初始值,以便它们仅在您第一次打开对话框时设置,如果您已完成更改并旋转手机,则保留并缓存最后一个状态?
下面我粘贴了我的代码的简化版本。一种解决方案可能是在newInstance()方法中初始化类属性,但是我需要将它们设置为静态。其他解决方案可能是通过Bundle传递值,但没有put方法将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
}
答案 0 :(得分:2)
Calendar
为Serializable
,因此您可以将其作为Bundle
中的内容。
答案 1 :(得分:-1)
您可以将数据存储在onSaveInstanceState(Bundle outState)方法中,并在onRestoreInstanceState()方法中再次读取它们。 onSaveInstanceState将在屏幕旋转之前调用,而onRestoreInstanceState()在更改之后调用。这是在方向更改之间存储数据的好地方。
或者您也可以添加清单文件
android:configChanges="orientation"
将此值添加到activitiy,其中包含alertDialog。