发现敲入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>
问底一下的话,为什么废弃?接下来他还回答了引用了别人的帖子
为什么用一个单独的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衰落的——人有时不是死在绝境路上,而是死在了十字路口上。