前几天自己做了个小应用需要用到在fragment中监听到activity中按钮的点击时间,并且activity向fragment传值,百度了很多但是一直没找到具体的实现方法没有找到可以在fragment中监听到activity中的点击事件,自己研究了一下,发现还是用接口回调实现,既可以传值也可以传递监听事件,好了废话不多说,接下来简单实现一下.
首次先实现的是fragment监听activity按钮的点击时间。
先在activity定义回调接口参数可以是(view v),也可以是其他类型的参数,这些参数通过回调从activity传递到fragment.
//声明回调接口
private MyOnClick myPersonOnClick,myCompanyOnClick;
//定义回调接口
public interface MyOnClick{
void myListener(Map what);
}
定义之后声明一个接口类型的变量,然后在需要调用的地方,例如onClick方法中去调用它写法如下
//传递点击事件 以及activity向fragment传值
if(null!=myPersonOnClick){
myPersonOnClick.myListener(personMap);
}
if(null!=myCompanyOnClick){
myCompanyOnClick.myListener(companyMap);
}
定义set方法将接口从fragment中传递过来
public void setCompanyOnclick(MyOnClick myOnClick){this.myCompanyOnClick=myOnClick;}
public void setMyPersonOnClick(MyOnClick myOnClick1){
this.myPersonOnClick=myOnClick1;
}
然后在fragment实现接口的相关方法,并在fragment的声明周期中去注册接口
//声明及实现接口的方法
private MainActivity.MyOnClick myOnClick = new MainActivity.MyOnClick() {
@Override
public void myListener(Map what) {
setData(what);
}
};
覆写onAttach方法注册接口方法
@Override
public void onAttach(Context context) {
super.onAttach(context);
//注册接口
((MainActivity) context).setMyPersonOnClick(myOnClick);
}
这就是接口回调的全过程我这里实现的是传值问题,其他的传递点击事件,onTouch事件都类似只不过是传递参数发生变化。