3 回答

TA貢獻2041條經(jīng)驗 獲得超4個贊
場景一:
復(fù)制代碼
Button button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(new Button.OnClickListener() {
//回調(diào)函數(shù)
@override
publicvoid onClick(View v) {
buttonTextView.setText("按鈕被點擊了");
}
});
復(fù)制代碼
上面的代碼給按鈕加了一個事件監(jiān)聽器,這其實就是"回調(diào)"最常見的應(yīng)用場景之一。我們自己不會顯示地去調(diào)用onClick方法。用戶觸發(fā)了該按鈕的點擊事件后,它會由Android系統(tǒng)來自動調(diào)用。
場景二:
復(fù)制代碼
@Override
publicvoid onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
// You code...
}
@Override
publicvoid onResume() {
super.onResume();
// You code...
}
復(fù)制代碼
上面的方法大家就更熟悉了,這是Android系統(tǒng)在Activity類中設(shè)置的回調(diào)函數(shù),在Activity生命周期的不同階段,Android系統(tǒng)會自動調(diào)用相應(yīng)的方法(onCreate, onPause, onResume,onDestroy等等)
以上是兩個Android中用到"回調(diào)"的場景,他們的代碼實現(xiàn)可能不同,但是思想上是相近的,都是"回調(diào)"思想的體現(xiàn)。下面,我們在Java中分別模擬這兩個場景。
首先模擬注冊事件監(jiān)聽器。先寫一個監(jiān)聽器接口
復(fù)制代碼
package com.listener;
/**
* 點擊監(jiān)聽器接口
* @author CodingMyWorld
*
*/
publicinterface MyOnClickListener {
publicvoid onClick();
}
復(fù)制代碼
然后寫一個我們自己的Button類
復(fù)制代碼
package com.listener;
publicclass MyButton {
private MyOnClickListener listener;
/**
* 設(shè)置具體點擊監(jiān)聽器
* @param listener 點擊監(jiān)聽器實現(xiàn)類
*/
publicvoid setOnClickListener(MyOnClickListener listener) {
this.listener = listener;
}
/**
* 按鈕被點擊
*/
publicvoid doClick() {
listener.onClick();
}
}
復(fù)制代碼
最后模擬Client端的注冊監(jiān)聽器和觸發(fā)點擊操作。
復(fù)制代碼
package com.listener;
publicclass Client {
publicstaticvoid main(String[] args) {
MyButton button =new MyButton();
//注冊監(jiān)聽器
button.setOnClickListener(new MyOnClickListener() {
@Override
publicvoid onClick() {
System.out.println("按鈕被點擊了");
}
});
//模擬用戶點擊
button.doClick();
}
}
復(fù)制代碼
以上就是"回調(diào)"思想在Java中事件監(jiān)聽的運用,我們再模擬第二個場景,"回調(diào)"在activity生命周期方法調(diào)用的體現(xiàn)。由于比較簡單,我就不多做解釋了,大家直接看代碼。
復(fù)制代碼
package com.activity;
publicabstractclass Activity {
protectedvoid onCreate() {
System.out.println("創(chuàng)建準(zhǔn)備~~~~~~~");
}
protectedvoid onDestroy() {
System.out.println("銷毀準(zhǔn)備~~~~~~~~");
}
}
復(fù)制代碼
復(fù)制代碼
package com.activity;
publicclass ConcreteActivity extends Activity {
@Override
protectedvoid onCreate() {
super.onCreate();
System.out.println("創(chuàng)建中!?。?quot;);
}
@Override
protectedvoid onDestroy() {
super.onDestroy();
System.out.println("銷毀中?。。?quot;);
}
}
復(fù)制代碼
復(fù)制代碼
package com.activity;
publicclass Client {
publicstaticvoid main(String[] args) {
Activity activity =new ConcreteActivity();
activity.onCreate();
activity.onDestroy();
}
- 3 回答
- 0 關(guān)注
- 610 瀏覽
添加回答
舉報