【发布时间】:2013-12-28 19:48:26
【问题描述】:
AlertDialog 和DialogFragment 将在设备旋转后恢复任何数据(文本视图中的编辑文本,单选中的选定元素)。并且不会在多选模式下恢复选中的项目。准确地说 - 它会记住以false 启动的字段,并始终重置以true 启动的字段(旋转后重置为真)。
这很奇怪,我做错了什么?我希望它恢复所有数据(尤其是当所有视图由对话框本身管理时)。
UPD 1:我实际上明白,我可以在对话框中跟踪任何用户与 UI 的交互,并将其保存在包中的对话框/片段实例甚至静态变量之间。但是它已经管理来保存我的自定义布局的状态(edittext+checkbox)和单选选择自己。并且只有 multichoice 的行为错误与类似的代码。这就是我想了解的。
下面的工作演示。 在 Nexus 5 / Android 4.4.2 上测试
仅实现一种方法的活动
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button single = (Button) findViewById(R.id.single);
single.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
df_single newDialog = new df_single();
newDialog.show(MyActivity.this.getFragmentManager(), "dialog");
}
});
Button multi = (Button) findViewById(R.id.multi);
multi.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
df_multi newDialog = new df_multi();
newDialog.show(MyActivity.this.getFragmentManager(), "dialog");
}
});
}
这是布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:id="@+id/single" android:layout_width="200dp" android:layout_height="wrap_content" android:text="list single"/>
<Button android:id="@+id/multi" android:layout_width="200dp" android:layout_height="wrap_content" android:text="list multi"/>
DialogFragment 单选
public class df_single extends DialogFragment {
public df_single() { }
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Single");
String[] items = new String[]{"1", "2", "3", "4", "5"};
builder.setSingleChoiceItems(items, 1, null);
return builder.create();
}
}
用于多选的DialogFragment
public class df_multi extends DialogFragment {
public df_multi() { }
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Multi");
String[] items = new String[]{"1", "2", "3", "4", "5"};
boolean[] checked = new boolean[]{true, false, true, false, true};
builder.setMultiChoiceItems(items, checked, null);
Dialog answer = builder.create();
return answer;
}
}
【问题讨论】:
标签: android android-alertdialog dialogfragment