我创建了一个 DialogFragment,在 onCreateDialog 方法中构建并返回一个包含两个 EditText 视图的 AlertDialog。我在 onCreateDialog 方法中设置这两个编辑文本的初始值,这很有效,但如果旋转电话,则所有更改都会丢失/恢复为初始值,因为 onCreateDialog 将被重新调用。
我的问题是:应该将最初的值放在哪里,以便只有在第一次打开对话框时才设置它们,如果您进行更改并旋转电话,则保留和附加最后状态?
下面是我代码的简化版本。一个解决方案可能是在 newInstance() 方法中初始化类属性,但那么我需要将它们设置为静态的。另一个解决方案可能是通过 Bundle 传递值,但没有 put 方法接受 Calendar 类型的参数。
什么是最佳实践?
我的问题是:应该将最初的值放在哪里,以便只有在第一次打开对话框时才设置它们,如果您进行更改并旋转电话,则保留和附加最后状态?
下面是我代码的简化版本。一个解决方案可能是在 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
}