Android中显示Dialog的方法
16lz
2021-01-23
可能是楼主看的书太老了,所以才会有这种问题。但是我相信还有其他的朋友会遇到相同的问题,所以今天我就对Android中在Activity中创建Dialog的方法进行一下简短的讨论。
先看一个大家都很熟悉的方法:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showDialog(0); } @Override protected Dialog onCreateDialog(int id) { switch (id){ case 0: return ProgressDialog.show(this, "A progressDialog", "Please wait", true); } return null; }
但是其实这种方式在Android API Level 13就已经@Deprecated了,那么有什么替代方法呢?
Google官方推荐替代方法如下:
使用DialogFragment
:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showMyDialog(); } private void showMyDialog() { myDialog myDialog = new myDialog(); Bundle bundle = new Bundle(); bundle.putString("title", "A progressbar"); bundle.putString("description", "Please wait"); myDialog.setArguments(bundle);// myDialog.setTargetFragment(this); myDialog.show(getFragmentManager(), "tag"); } }); } class myDialog extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { //使用bundle传递一系列dialog需要的参数 Bundle bundle = getArguments();// setContentView(R.layout.layout_dialog); return new ProgressDialog.Builder(getActivity()) .setTitle(bundle.getString("title")) .setIcon(R.drawable.ic_launcher) .setMessage(bundle.getString("description")) //能使用单独的XMl文件对dialog布局// .setView(R.layout.layout_dialog) .create(); } }
说白了就是现在Google推荐使用对Dialog操作的API,而不是直接对Dialog本身进行操作,而且还可以借用到Fragment的优势。这种方法通过创建一个继承自DialogFragment的类实现(如上)。
那么如果只是创建一个简单的Yes/No的对话框,这样做是不是有一点“用牛刀杀鸡”的意味呢?那么可以像下面这样做:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder alertDialog = new ProgressDialog.Builder(MainActivity.this) .setTitle("Yes/No") .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setMessage("This is a YES/NO question."); alertDialog.show(); } });
具体可参考楼主看的这一篇帖子
更多相关文章
- 麦子学院android老师分享android实现listview异步加载图片的方法
- Android 更新UI的两种方法——handler和runOnUiThread(
- android 数据库操作初试
- android在一个app程序中,打开另一个app的方法
- 小米5手机Android运行程序闪退出错解决方法
- Android 查看SHA1值的方法