发现敲入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衰落的——人有时不是死在绝境路上,而是死在了十字路口上。