本次内容聚焦于Android开发中对话框组件的迁移策略,深入分析从传统AlertDialog及废弃组件向DialogFragment转换的核心原因与操作步骤。
private void showConfirmDialog() {
new AlertDialog.Builder(this)
.setTitle("确认删除")
.setMessage("确定要删除这条记录吗?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
deleteRecord();
}
})
.setNegativeButton("取消", null)
.show();
}private void showLoading() {
ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage("加载中...");
dialog.setCancelable(false);
dialog.show();
}
两个问题:

ProgressDialog 已官方废弃(API 26+),Google 不建议继续使用class ConfirmDialogFragment : DialogFragment() { companion object {
const val TAG = "ConfirmDialog" fun newInstance(title: String, message: String): ConfirmDialogFragment {
return ConfirmDialogFragment().apply {
arguments = Bundle().apply {
putString("title", title)
putString("message", message)
}
}
}
} override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val title = arguments?.getString("title") ?: ""
val message = arguments?.getString("message") ?: "" return AlertDialog.Builder(requireContext())
.setTitle(title)
.setMessage(message)
.setPositiveButton("确定") { _, _ ->
// 通过 FragmentResult 回传结果
}
.setNegativeButton("取消", null)
.create()
}
}
调用方:
ConfirmDialogFragment.newInstance("确认删除", "确定要删除这条记录吗?")
.show(parentFragmentManager, ConfirmDialogFragment.TAG)
ProgressDialog 替换为自定义 DialogFragment:
class LoadingDialogFragment : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return Dialog(requireContext()).apply {
setContentView(R.layout.dialog_loading)
setCancelable(false)
}
}
}
DialogFragment 由 FragmentManager 管理,配置变更后会自动恢复,不会再丢。但如果显示 DialogFragment 的 Activity 本身被重建了,需要用 childFragmentManager 还是 parentFragmentManager 要搞清楚——在 Activity 里用 supportFragmentManager,在 Fragment 里用 childFragmentManager。
结果回传不要再用"持有 Activity 引用"的老套路,用 setFragmentResultListener 即可。
通过采用DialogFragment来替代旧有的对话框实现方式,能有效解决因配置变更导致的界面状态丢失问题,并顺应官方对废弃API的更新要求。