发现敲入showDialog方法废弃或者过时真的查不到什么,直接打了showDialog deprecated上去,英文就英文吧。
不愧是StackOverFlow网站(好风趣的名字),令我惊讶的是,这个提问在一年前就有了。老外的东西还是老外快一点。
参考两个帖子http://stackoverflow.com/questions/11220820/the-method-showdialogint-from-the-type-activity-is-deprecated-in-android
和http://stackoverflow.com/questions/10285047/showdialog-deprecated-whats-the-alternative/10285062#10285062
其实查官方Api的时候就能看到。 showDialog(int id)是在Api level 1 添加的方法。Api level 13(Honeycomb 3.0) 时方法就废弃了。在程序里面调用Dialog使用新的DialogFragment类代替FragmentManager(既然知道这个代替了,就自己查查api吧,看怎么用)。通过Android的兼容包,在旧平台也是可用的。
Fragment(Fragment代表在一个Activity里面用户接口的一个行为或者一部分)显示一个对话框窗口并且位于Activity窗口的顶层,其中这样的Fragment就包括了Dialog类,正确的显示基于fragment的状态。控制对话框的show,hide, dismiss 应该通过Api的调用而不是直接调用对话框。
找到android.app.DialogFragment类的api,找到一个简单的例子:
- <span style="font-size:18px">public static class MyAlertDialogFragment extends DialogFragment {
- public static MyAlertDialogFragment newInstance(int title) {
- MyAlertDialogFragment frag = new MyAlertDialogFragment();
- Bundle args = new Bundle();
- args.putInt("title", title);
- frag.setArguments(args);
- return frag;
- }
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- int title = getArguments().getInt("title");
- return new AlertDialog.Builder(getActivity())//传入当前的Activity对象
- .setIcon(R.drawable.alert_dialog_icon)//一般不往对话框加自己的图片可以删掉这句话
- .setTitle(title)
- .setPositiveButton(R.string.alert_dialog_ok,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- ((FragmentAlertDialog)getActivity()).doPositiveClick();
- }
- }
- )//positiveButton 肯定(乐观)按钮,android2点几的版本肯定在左,估计谷歌为了
- //为了迎合大多数人的右手习惯,在4.0的是在你右侧
- .setNegativeButton(R.string.alert_dialog_cancel,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- ((FragmentAlertDialog)getActivity()).doNegativeClick();
- //这句可以改你要写入的东西,像我用Toast.makeTest();
- }
- }
- )
- .create();
- }
- }</span>
直接copy进项目是没用的,需要读懂里面的方法是为了干什么。
问底一下的话,为什么废弃?接下来他还回答了引用了别人的帖子
Android DialogFragment vs Dialog
为什么用一个单独的DialogFragment而不用一个简单的Dialog,这不是很荒谬么。看完Api文档里面的介绍DialogFragment的代码一大堆,使用一个有Yes或者No的按钮只需要AlertDialog builder 创建一个AlertDialog就行了,没必要编那么多。
在Fragment中处理事件有很多种方法,但我只需要简单通过构造器把定义的消息Handler放进DialogFragment中,然后再把消息准确的与各种点击相响应。
- <span style="font-size:18px">private Message okMessage;
- ...
- okMessage = handler.obtainMessage(MY_MSG_WHAT, MY_MSG_OK);
- public void onClick(.....
- if (which == DialogInterface.BUTTON_POSITIVE) {
- final Message toSend = Message.obtain(okMessage);
- toSend.sendToTarget();
- }
- }
- outState.putParcelable("okMessage", okMessage);
- if (savedInstanceState != null) {
- okMessage = savedInstanceState.getParcelable("okMessage");
- }</span>