1. 程式人生 > >Android之路:回撥的入門理解(CallBack)

Android之路:回撥的入門理解(CallBack)

這裡我會用最簡單的例子來介紹Android中的回撥。

例子:我會定義一個輸入框,如果輸入的數字大於10,我會輸出“大於10”,否則輸出“小於或者等於10”。看具體的程式碼怎麼用回撥來實現這個功能。

1.定義一個普通介面A,裡面 定義兩個方法。
interface A{
void success();
void fail();
}
2.我再定義一個B類,裡面寫一個方法,來判斷輸入的數字是否大於10.這裡傳入兩個引數,這個num就是你要輸入的數字,如果大於10,我們就呼叫A介面的success()方法,否則呼叫fail()方法,因為要呼叫success()和fail()方法,所以我才在引數中引入A介面。
class B{
public isThanTen(int num,A a){
if(num>10)
{a.success();}
else
{a.fail()}
}
}
3.在Activity中呼叫B類中的isThanTen()方法.我這裡提出部分程式碼,這裡num你可以輸入從EditTextView裡面獲取的數值。 另一個引數因為是A介面型別,所以我們new出來,既然是new的所以我們就必須要實現A介面的success()和fail()方法。在下面兩個方法列印兩個輸出語句。
B b=new B();  
 b.isThanTen(num, new A() {
	@Override
	public void success() {
		System.out.println("大於10");
	}
	@Override
	public void fail() {
		System.out.println("小於10");
	}
});
4:我們執行Activity,如果輸入11,則會列印”大於10“,輸入9會列印”小於10“。為什麼會是這樣呢?當我們呼叫isThanTen()這個方法的時候,就會去B類判斷是否大於10,如果大於10,則執行success()方法,而success()方法又在Activity中實現,所以就會執行你寫的”System.out.println("大於10");小於10也是同理。
結論:我們這裡寫的介面A中的success()方法和fail()方法就是回撥方法,也稱回撥函式。
回想一下剛才的過程,是Activity去呼叫B中的方法,然後B又去呼叫A介面中的方法,但是A介面的方法是在Activity中實現,所以B實際上是呼叫的Activity中的方法。總結一句話就是Activity去呼叫B方法就是為了來呼叫自己的方法。
有人如果想問,我這麼呼叫自己的方法的目的何在?直接呼叫不行嗎?我回答一下,這也是我當年的疑惑。使用這種方法是因為我們我不知道何時要去呼叫自己的success()和fail()方法,而且這個邏輯判斷只能在其他類中去完成。所以這裡你輸入的數字是否大於10只能在B類中去判斷,B判斷完後給你結果。所以你才知道去呼叫success()和fail()中的哪個方法。