showDialog方法 deprecated

发现敲入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,找到一个简单的例子:

[java]  view plain copy
  1. <span style="font-size:18px">public static class MyAlertDialogFragment extends DialogFragment {  
  2.   
  3.     public static MyAlertDialogFragment newInstance(int title) {  
  4.         MyAlertDialogFragment frag = new MyAlertDialogFragment();  
  5.         Bundle args = new Bundle();  
  6.         args.putInt("title", title);  
  7.         frag.setArguments(args);  
  8.         return frag;  
  9.     }  
  10.   
  11.     @Override  
  12.     public Dialog onCreateDialog(Bundle savedInstanceState) {  
  13.         int title = getArguments().getInt("title");  
  14.   
  15.         return new AlertDialog.Builder(getActivity())//传入当前的Activity对象  
  16.                 .setIcon(R.drawable.alert_dialog_icon)//一般不往对话框加自己的图片可以删掉这句话  
  17.                 .setTitle(title)  
  18.                 .setPositiveButton(R.string.alert_dialog_ok,  
  19.                     new DialogInterface.OnClickListener() {  
  20.                         public void onClick(DialogInterface dialog, int whichButton) {  
  21.                             ((FragmentAlertDialog)getActivity()).doPositiveClick();  
  22.                         }  
  23.                     }  
  24.                 )//positiveButton 肯定(乐观)按钮,android2点几的版本肯定在左,估计谷歌为了  
  25.                  //为了迎合大多数人的右手习惯,在4.0的是在你右侧  
  26.                 .setNegativeButton(R.string.alert_dialog_cancel,  
  27.                     new DialogInterface.OnClickListener() {  
  28.                         public void onClick(DialogInterface dialog, int whichButton) {  
  29.                             ((FragmentAlertDialog)getActivity()).doNegativeClick();  
  30.                            //这句可以改你要写入的东西,像我用Toast.makeTest();  
  31.  }  
  32.                     }  
  33.                 )  
  34.                 .create();  
  35.     }  
  36. }</span>  

直接copy进项目是没用的,需要读懂里面的方法是为了干什么。


     问底一下的话,为什么废弃?接下来他还回答了引用了别人的帖子

Android DialogFragment vs Dialog

      为什么用一个单独的DialogFragment而不用一个简单的Dialog,这不是很荒谬么。看完Api文档里面的介绍DialogFragment的代码一大堆,使用一个有Yes或者No的按钮只需要AlertDialog builder 创建一个AlertDialog就行了,没必要编那么多。

     在Fragment中处理事件有很多种方法,但我只需要简单通过构造器把定义的消息Handler放进DialogFragment中,然后再把消息准确的与各种点击相响应。

[java]  view plain copy
  1. <span style="font-size:18px">private Message okMessage;  
  2. ...  
  3. okMessage = handler.obtainMessage(MY_MSG_WHAT, MY_MSG_OK);  
  4. public void onClick(.....  
  5.     if (which == DialogInterface.BUTTON_POSITIVE) {  
  6.         final Message toSend = Message.obtain(okMessage);  
  7.         toSend.sendToTarget();  
  8.     }  
  9.  }  
  10. outState.putParcelable("okMessage", okMessage);  
  11. if (savedInstanceState != null) {  
  12.     okMessage = savedInstanceState.getParcelable("okMessage");  
  13. }</span>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值