簡體   English   中英

兩項活動之間有趣的交流方式

[英]An interesting way of communication between two activities

第一步:

public class MyHandler extends Application {
    private Handler handler = null;

    public Handler getHandler() {
        return handler;
    }

    public void setHandler(Handler handler) {
        this.handler = handler;
    }

}

下一步:在活動A中:

MyHandler myHandler = (MyHandler)getApplication();
    Handler handler = new Handler(){

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            if(msg.what == 0x123)
                progressDialog.dismiss();
        }
    };
    myHandler.setHandler(handler);

在活動B中:

MyHandler myHandler = (MyHandler)getApplication();
Handler handler = myHandler.getHandler();
handler.sendEmptyMessage(0x123);

盡管兩個myHandler的引用相同,但是我們使用(MyHandler)將Application更改為MyHandler。Application沒有處理程序字段,為什么應用程序可以保留字段處理程序? 因為我認為在活動B中, MyHandler myHandler = (MyHandler)getApplication(); 無法獲取字段處理程序。

多態性。

引用的類型為Application並不一定意味着引用的對象是。 該對象可以是Application或的任何子類Application

(MyHandler)值之前是鑄件 ,並且簡單地轉換基准 ,而不是對象 在運行時檢查MyHandler的有效性,如果對象不是MyHandler或其子類,則拋出ClassCastException (在您的情況下,檢查通過,因此沒有問題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM