轉:http://blog.csdn.net/iaiti/article/details/12782725
發現敲入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>
后面代碼的意圖我不是很懂。
以前小學一下,這段時間要用到Android就重新學了一下,當發現手機一連上之后Eclipse可以直接編譯到手機運行時很激動。
世界也在變,時代也在變,人在不,很多方法廢棄,雖然用的是吳亞峰老師的書,2012年一月。我的手機從2.2刷到2.3再刷4.0.
發現很搞笑的東西,之前初學時是觀看Mars老師的視頻,然后我用周末的時間用來學,后面太多事情就放了放,發現他堅持了好久,有些時候還是凌晨的,后面到53集斷了,進來光顧他論壇又發現開始更新,而且還在淘寶賣東西了。當時馬士兵老師也沒有看好Android,剛起步,放遠一下開源的東西,加上比蘋果更親民的價格,確實蘋果價格雖然“高”,是有人買得起,房子也是這個道理。應該是越來越火的。如果Nokia當年像HTC早點搭上這班車,可能還是霸主,也不用賣樓。
不過還是那句,手機上用自己寫點代碼能在自己的手機展示很多東西,It is
amazing!