不懂的东西总得弄懂,出来混迟早要还的。
ps:楼主现在还是个小菜鸟,但是还是要腾飞的。
定义:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法
打个比方:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
先以一个Demo来揭开java中接口回调:
有一天小王遇到一个很难的问题,问题是“1 + 1 = ?”,就打电话问小李,小李一下子也不知道,就跟小王说,等我办完手上的事情,就去想想答案,于是挂了电话,自己办自己的事情,过了一会,小李打了小王的电话,告诉他答案是2。
定义接口:
package class_and_interface;
public interface CallBack {
/**
* 小王问小李问题。
* A调用B中C方法,B反过来调用A中D方法。
* 小王A 小李B 问C。
* 小李B 小王A 答D
*/
public void solve(String result);
}
小王:
package class_and_interface;
public class Wang implements CallBack{
private Li li;
public Wang(Li li){
this.li=li;
}
public void askQuestion(String question) throws InterruptedException{
li.executeQuestion(Wang.this, question);
}
@Override
public void solve(String result) {
// TODO Auto-generated method stub
System.out.println("solve the question"+result);
}
}
小李:
package class_and_interface;
public class Li {
public void executeQuestion(CallBack call,String question) throws InterruptedException{
Thread.sleep(3000);
String result="呵呵?";
call.solve(result);
}
}
测试:
package class_and_interface;
public class Test {
public static void main(String[] args) throws InterruptedException {
Li li=new Li();
Wang wang=new Wang(li);
wang.askQuestion("1+1=?");
}
}
Android中接口回调的体现:
- package com.example.demoactivity;
-
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.Toast;
-
-
-
-
-
-
- public class MainActivity extends Activity implements OnClickListener{
-
-
-
- private Button button;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- button = (Button)findViewById(R.id.button1);
-
-
-
-
- button.setOnClickListener(this);
- }
-
-
-
-
-
- @Override
- public void onClick(View v) {
- Toast.makeText(getApplication(), "OnClick", Toast.LENGTH_LONG).show();
- }
-
- }
下面是View类的setOnClickListener方法,就相当于B类咯,只把关键代码贴出来
-
-
-
-
-
- public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource {
-
-
-
-
-
- protected OnClickListener mOnClickListener;
-
-
-
-
-
-
-
-
-
-
-
- public void setOnClickListener(OnClickListener l) {
- if (!isClickable()) {
- setClickable(true);
- }
- mOnClickListener = l;
- }
-
-
-
-
-
-
-
-
- public boolean performClick() {
- sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
-
- if (mOnClickListener != null) {
- playSoundEffect(SoundEffectConstants.CLICK);
-
-
- mOnClickListener.onClick(this);
- return true;
- }
-
- return false;
- }
- }