首先,新建一个接口CallBackA
public interface CallBackA {
void showA(String str);
}
第一种方法,通过构造方法传入interface
- 新建ClassA,编写参数为CallBackA的构造方法
public ClassA(CallBackA callBackA) {
this.callBackA = callBackA;
}
- 在ClassA中需要回调的地方调用callBackA.showA方法
public void netWork(){
callBackA.showA("A");
}
- ClassA的全部代码
public class ClassA {
private CallBackA callBackA;
public ClassA(CallBackA callBackA) {
this.callBackA = callBackA;
}
public void netWork(){
callBackA.showA("A");
}
}
- 接收回调内容的类MainActivity
先得到ClassA的对象,顺便将CallBackA传到ClassA中。传参的方式有两张,一种是将CallBackA直接new出来,
ClassA classA = new ClassA(new CallBackA() {
@Override
public void showA(String str) {
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();
}
});
classA.netWork();
另一种是让MainActivity实现CallBackA,将this传入。
public class MainActivity extends AppCompatActivity implements CallBackA{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ClassA classA = new ClassA(this);
classA.netWork();
}
@Override
public void showA(String str) {
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();
}
}
第二种方法是在需要回调的对象里编写一个公共的方法,当然参数还是CallBackA
public void setCallBack(CallBackA callBackA) {
this.callBackA = callBackA;
}
拿到对象后,调用setCallBack方法将CallBackA传进去。和上面一样,传的方法有两种。
公共方法这个传入方法,我一般用在Service中,因为Service不能new出来,只能通过bindService得到Service对象后调用里面的方法将CallBackA传入。