小李首先遇到了一个难题,自己无法解决,第一时间想到了好兄弟小王,立马通过askQuestion()向小王提问,接着继续做自己的事情。等到小王有了答案,自然会告诉小李。
package com.example.callbackdemo;
/**
* 这是一个回调接口
*/
public interface CallBack {
void solve(String result);
}
不过在提问之前,当然先要写一个回调接口。
package com.example.callbackdemo;
import android.util.Log;
public class Li implements CallBack{
private Wang wang;
public Li(Wang wang) {
super();
this.wang = wang;
}
/**
* 小李开始提问
*/
public void askQuestion(final String question){
new Thread(new Runnable() {
public void run() {
wang.handleQuestion(Li.this, question);
}
}).start();
/**
* 继续做自己的事
*/
doSomething();
}
private void doSomething() {
}
/**
* 小王知道答案后告知小李,这就是回调方法
*/
@Override
public void solve(String result) {
//需要小王告知答案
Log.v("jjf", "小王告知的答案->" + result);
}
}
小王接到小李的难题时,一时想不起答案,但是手头上的事又不能放下,只能等想到答案时再告诉小李。
package com.example.callbackdemo;
import android.util.Log;
public class Wang {
private int i = 0;
private String result;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public void handleQuestion(CallBack callBack,String question){
Log.v("jjf", "小李问的问题->" + question);
/**
* 一时想不起答案,先做自己的事
*/
for (int i = 0; i < 100; i++) {
}
// while(i < 10){
// new Thread(new Runnable() {
// public void run() {
// i++;
// try {
// Thread.sleep(500);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }
// }).start();
// }
/**
* 办完事情想到答案了,赶紧告诉小李
*/
callBack.solve(result);
}
}
以下为主程序:
package com.example.callbackdemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private Wang wang;
private Li li;
private Button btn;
private EditText et1;
private EditText et2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String question = et1.getText().toString().trim();
li.askQuestion(question);
String result = et2.getText().toString().trim();
wang.setResult(result);
}
});
}
private void initView() {
wang = new Wang();
li = new Li(wang);
btn = (Button) findViewById(R.id.button1);
et1 = (EditText) findViewById(R.id.editText1);
et2 = (EditText) findViewById(R.id.editText2);
}
}