接口回调工作中使用的很多,逻辑比较复杂的需要涉及多级回调,下面就写一个简单的二级回调栗子。
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类中变量显示