Android回調監聽的實現


一、首先定義監聽函數

public interface OnKeyValueListener {

    void  getKeyValueClick(String value);
}

二、在需要傳遞內容的 A類 中傳入該監聽對象

2.1 獲取監聽


public class MyButton {
public MyButton(Context context) {
}
private OnKeyValueListener mOnkeyValueListener; //定義監聽接口,接受Main類傳過來的監聽對象

//模擬用戶觸摸屏幕時系統底層進行的操作
public void doClick() {
mOnkeyValueListener.getKeyValueClick("點擊了A"); //該方法可以在A類跟Main類中調用,都會將內容傳給Main類。這句話就實現了監聽的效果
}

public OnKeyValueListener getmOnkeyValueListener() {
return mOnkeyValueListener;
}

public void setmOnkeyValueListener(OnKeyValueListener mOnkeyValueListener) {
this.mOnkeyValueListener = mOnkeyValueListener; //Main類中調用該方法,傳入監聽對象
}
}

2.2 傳遞內容

在該類中需要調用的地方實現監聽函數方法 

mOnkeyValueListener.getKeyValueClick("點擊了A"); //該方法可以在A類跟Main類中調用,都會將內容傳給Main類。這句話就實現了監聽的效果

三、傳入監聽函數,並實現方法

public class MainActivity extends Activity implements OnKeyValueListener{

MyButton myButton ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myButton = new MyButton(MainActivity.this);
myButton.setmOnkeyValueListener(this); //傳遞監聽對象到A類

myButton.doClick(); //這里是調用A類中的方法,接受到A類傳入的內容
}

@Override
public void getKeyValueClick(String value) {
Log.d("panzq","######## value = "+value); //打印獲取到的內容
}
}

 結果

2019-04-17 12:55:38.285 3660-3660/com.panzq.callbacklistener D/panzq: ######## value = 點擊了A

1.為按鈕setmOnkeyValueListener注冊監聽,將括號里面的this作為參數傳給MyButton,this繼承了 OnKeyValueListener

2.由於MyButton中有一個setmOnkeyValueListener方法,通過this.mOnkeyValueListener = mOnkeyValueListener;;可以將第一步傳進來的OnKeyValueListener對象賦給其成員變量

3.用戶點擊屏幕,觸發系統底層的doClick函數
4.在doClick函數中
mOnkeyValueListener.getKeyValueClick("點擊了A")中,由第二步我們已知listener已被賦予成用戶傳進來的具體實現,所以此時的 mOnkeyValueListener.getKeyValueClick("點擊了A");所調用的方法就是用戶傳進來的listener中重寫的getKeyValueClick方法,到這里也就是相當於反過來調用回用戶所重寫的getKeyValueClick(),這里的getKeyValueClick也就是我們常說的回調方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM