对话框类型 | 数据获取方式 |
---|---|
AlertDialog | 通过setPositiveButton 的OnClickListener 获取输入数据 |
DatePickerDialog | 重写onDateSet 方法获取选中日期 |
TimePickerDialog | 重写onTimeSet 方法获取选中时间 |
自定义布局对话框 | 通过findViewById 获取控件实例,再调用getText() 等方法读取数据 |
// 创建EditText输入框 EditText editText = new EditText(this); editText.setHint("请输入内容"); // 构建对话框 AlertDialog.Builder builder = new AlertDialog.Builder(this) .setTitle("输入对话框") .setView(editText) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 获取输入数据 String input = editText.getText().toString(); Toast.makeText(MainActivity.this, "输入内容:" + input, Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("取消", null); builder.create().show();
// 创建DatePickerDialog new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { // 获取选择的日期 String date = year + "-" + (month+1) + "-" + dayOfMonth; textView.setText("选择日期:" + date); } }, 2023, 9, 1).show(); // 默认日期为2023年10月1日
// 加载自定义布局 LayoutInflater inflater = getLayoutInflater(); View dialogView = inflater.inflate(R.layout.dialog_custom, null); // 获取布局中的控件 EditText nameEdit = dialogView.findViewById(R.id.edit_name); Spinner ageSpinner = dialogView.findViewById(R.id.spinner_age); // 构建对话框 AlertDialog.Builder builder = new AlertDialog.Builder(this) .setTitle("自定义表单") .setView(dialogView) .setPositiveButton("提交", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 获取输入数据 String name = nameEdit.getText().toString(); String age = ageSpinner.getSelectedItem().toString(); textView.setText("姓名:" + name + ",年龄:" + age); } }); builder.create().show();
避免内存泄漏
OnClickListener
中使用弱引用(如WeakReference
)持有上下文dialog.dismiss()
)数据校验
onClick
中增加空值判断(如TextUtils.isEmpty(editText.getText())
)多窗口场景处理
getActivity()
或getContext()
获取上下文requireActivity()
确保上下文不为空A1:
getActivity()
或requireContext()
作为上下文 OnClickListener
中通过getActivity()
访问Activity成员变量 // 在Fragment中创建AlertDialog new AlertDialog.Builder(requireContext()) .setTitle("选择操作") .setPositiveButton("确认", (dialog, which) -> { // 通过Activity访问UI组件 MainActivity activity = (MainActivity) requireActivity(); activity.updateUI("Fragment传递的数据"); }) .show();
A2:
setAdapter
设置Spinner/ListView的数据源 OnClickListener
中根据业务逻辑处理数据 // 准备数据 List<String> options = Arrays.asList("选项1", "选项2", "选项3"); ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, options);
// 构建带Spinner的对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle(“动态数据对话框”)
.setView(new Spinner(this)) // 简化示例,实际应使用自定义布局
.setPositiveButton(“确定”, (dialog, which) -> {
// 处理选中的数据
});
builder.create().show();