回调的实现

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值