Android问题之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,找到一个简单的例子:

<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中,然后再把消息准确的与各种点击相响应。

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");
}


后面代码的意图我不是很懂。


     以前小学一下,这段时间要用到Android就重新学了一下,当发现手机一连上之后Eclipse可以直接编译到手机运行时很激动。


        世界也在变,时代也在变,人在不,很多方法废弃,虽然用的是吴亚峰老师的书,2012年一月。我的手机从2.2刷到2.3再刷4.0.


        发现很搞笑的东西,之前初学时是观看Mars老师的视频,然后我用周末的时间用来学,后面太多事情就放了放,发现他坚持了好久,有些时候还是凌晨的,后面到53集断了,进来光顾他论坛又发现开始更新,而且还在淘宝卖东西了。当时马士兵老师也没有看好Android,刚起步,放远一下开源的东西,加上比苹果更亲民的价格,确实苹果价格虽然“高”,是有人买得起,房子也是这个道理。应该是越来越火的。如果Nokia当年像HTC早点搭上这班车,可能还是霸主,也不用卖楼。

     

      不过还是那句,手机上用自己写点代码能在自己的手机展示很多东西,It is

amazing!


2014-9-16 :

后面看过一个很经典的答案,说为什么Nokia衰落的——人有时不是死在绝境路上,而是死在了十字路口上。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值