android二级接口回调实现

接口回调工作中使用的很多,逻辑比较复杂的需要涉及多级回调,下面就写一个简单的二级回调栗子。

1、需求:在A类中点击按钮,回调B类中的方法来改变A类中textView的内容,而第二个类中保存的变量需要通过C类中的方法来获得数据,简单的逻辑已经梳理清楚

简图:


2、定义一个接口,接口中定义两个方法,分别用于C类向B类中传递数据和B类将获取到的数据赋值给A类中变量、

public interface CallBack {
    void print();
    void setData();


}
3、定义A类,提供一个按钮点击事件,在按钮点击事件中回调B类中方法PrintName()

public class CallBackActivity extends Activity {

    private TextView tv_call_back;
    public static TextView tv_text;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_call_back);
        initView();
        setMethod();


    }

    private void setMethod() {
        tv_text = (TextView) findViewById(R.id.tv_text);

    }

    private void initView() {
        tv_call_back = (TextView) findViewById(R.id.tv_call_back);
        tv_call_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SecondCallBackActivity mCallBackActivity=new SecondCallBackActivity();
                mCallBackActivity.printName(new CallBack() {
                    @Override
                    public void print() {
                        Log.e("tag","print");
                    }

                    @Override
                    public void setData() {
                        Log.e("tag","setData");
                    }


                });
            }

        });
    }

}

4、在B类中定义方法PrintName()提供A类中回调,同时在该方法中回调C类中方法获取数据,在获取数据后,将获取到的数据赋值给A类中变量

public class SecondCallBackActivity extends Activity {


    public static String content;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_call_back2);
    }


    public void printName(CallBack mCallBack){

       //回调类setData中setData函数
        SetData mSetData=new SetData();
        mSetData.setData(new CallBack() {

            @Override
            public void print() {
            }

            @Override
            public void setData() {
                Log.e("tag","setData");
            }


        });

        //调用print方法
        mCallBack.print();

        //将setData中设置的数据传递给CallBackActivity
        CallBackActivity.tv_text.setText(content);
    }

}
5、在C类中提供方法供B类回调同时将数据传递给B类

public class SetData {
    public void setData(CallBack mCallBack){

        //调用接口中setData方法
        mCallBack.setData();
        SecondCallBackActivity.content="厉害了我的国";

    }
}
效果图:

按钮点击前:




按钮点击后:


可见已经将C类中的数据赋值给A类中变量显示

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值