3个类:MainActivity,ToShow,ToCaculate
ToCaculate负责计算,计算完成后通知ToShow,ToShow负责显示
这里就是回调的意义,ToCaculate进行一个耗时操作,ToShow等待它完成,在进行自己的操作。
新建接口Show,包含方法show()
public interface Show {
public void show();
}
ToShow实现接口Show中的方法show()
public class ToShow implements Show{
@Override
public void show() {
Log.e("sjj","get");
}
}
只是简单的打段log,告诉我们show()被执行
ToCaculate构造方法中传入接口Show,并在耗时操作结束后调用Show的方法show()
public class ToCaculate
int i=0;
public ToCaculate(Show show) {
while (i<10)
{
i++;
Log.e("sjj","i="+i);
}
if(i>=10)
{
Log.e("sjj","get i="+i);
show.show();
}
}
}
最后在main方法中new一个ToShow和ToCaculate
注意,在ToCaculate的构造方法中的参数是接口Show</p><p>但是这里构造的时候,我们传入的参数是实现Show这个接口的类ToShow
所以在ToCaculate中调用的不是Show的方法show(),而是ToShow的方法show()
这样就实现了ToCaculate操作完成的时候通知到ToShow,ToShow再执行自己的操作
public class MainActivity extends ActionBarActivity {
ToShow toShow;
ToCaculate toCaculate;
Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt= (Button) findViewById(R.id.main_bt);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("sjj","onCLick");
toShow=new ToShow();
toCaculate=new ToCaculate(toShow);
}
});
}
最后是log,可以看到首先是点击事件,然后ToCaculate中开始操作,完成后ToShow中的方法开始操作
03-02 23:18:35.243 5878-5878/com.example.administrator.callbackdemo E/sjj﹕ onCLick
03-02 23:18:35.243 5878-5878/com.example.administrator.callbackdemo E/sjj﹕ i=1
03-02 23:18:35.243 5878-5878/com.example.administrator.callbackdemo E/sjj﹕ i=2
03-02 23:18:35.243 5878-5878/com.example.administrator.callbackdemo E/sjj﹕ i=3
03-02 23:18:35.243 5878-5878/com.example.administrator.callbackdemo E/sjj﹕ i=4
03-02 23:18:35.243 5878-5878/com.example.administrator.callbackdemo E/sjj﹕ i=5
03-02 23:18:35.243 5878-5878/com.example.administrator.callbackdemo E/sjj﹕ i=6
03-02 23:18:35.243 5878-5878/com.example.administrator.callbackdemo E/sjj﹕ i=7
03-02 23:18:35.243 5878-5878/com.example.administrator.callbackdemo E/sjj﹕ i=8
03-02 23:18:35.243 5878-5878/com.example.administrator.callbackdemo E/sjj﹕ i=9
03-02 23:18:35.243 5878-5878/com.example.administrator.callbackdemo E/sjj﹕ i=10
03-02 23:18:35.243 5878-5878/com.example.administrator.callbackdemo E/sjj﹕ get i=10
03-02 23:18:35.243 5878-5878/com.example.administrator.callbackdemo E/sjj﹕ get