话不多说,直接上代码:
1、在需要触发事件的fragment中创建interface class
我为了以后的数据类型好实现,直接使用了泛型
public interface FrontCall<D> {
void call(View v, D data);
}
2、在fragment onAttach中初始化
当然这里会有个坑,当SDK API<23时,onAttach(Context context)不执行,需要使用onAttach(Activity activity),因此在使用的使用建议这两个都进行处理。
@Override
public void onAttach(@NonNull Context context) {
if (context instanceof FrontCall) {
frontCall = (FrontCall) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement FrontCall");
}
super.onAttach(context);
}
//当SDK API<23时,onAttach(Context context)不执行,需要重写onAttach(Activity activity),在这里进行初始化
@Override
public void onAttach(@NotNull Activity activity) {
super.onAttach(activity);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
if (activity instanceof FrontCall) {
frontCall = (FrontCall) activity;
} else {
throw new RuntimeException(activity.toString()
+ " must implement FrontCall");
}
}
}
3、在fragment 中触发
我在这里设置了点击事件,触发数据传递
view.findViewById(R.id.btn_go_3).setOnClickListener((v) -> {
frontCall.call(v, 2);
});
4、activity中进行实现,并编写后续执行
这里实现的时候就需要填写具体的数据类型了,
implements FragFront.FrontCall<Integer>{
@Override
public void call(View v, Integer data) {
Log.e(TAG,String.format("接收信息如下:\n %s",data));
}