Android的interface类似iOS的的协议委托Protocol,所以说尽管编程语言不通,但是思路是一致的!
1、传this实例给被委托类的interface对象
创建被委托类实例,传this过去
bottomNavigatorView= (BottomNavigatorView) findViewById(R.id.bottomNavigatorView);
if(bottomNavigatorView!= null) {
bottomNavigatorView.setOnBottomNavigatorViewItemClickListener(this);
}
被委托类:
public voidsetOnBottomNavigatorViewItemClickListener(OnBottomNavigatorViewItemClickListener listener) {
this.mOnBottomNavigatorViewItemClickListener= listener;
}
OnBottomNavigatorViewItemClickListenermOnBottomNavigatorViewItemClickListener;
public interfaceOnBottomNavigatorViewItemClickListener {
voidonBottomNavigatorViewItemClick(intposition, View view);
}
委托类实现方法
@Override //实现了接口方法
public voidonBottomNavigatorViewItemClick(intposition, View view) {
System.out.println("我响应了接口方法");
setCurrentTab(position);
}
注意这种需要在委托类中实现接口implementsBottomNavigatorView.OnBottomNavigatorViewItemClickListener
2、不传this实例给interface,而是直接在本类set方法中创建接口实例,然后响应接口的回调(实现接口的方法)
委托类代码:
@Override
public voidonViewCreated(View view,@Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
tabLayout= (TabLayout) view.findViewById(R.id.tabLayout);
tabLayout.setOnTabItemClickListener(newTabLayout.OnTabItemClickListener() {
@Override
public voidonTabItemClick(intposition, View view) {
System.out.println("点击当前tab");
setCurrentTab(position);
}
});
}
被委托类代码:
privateOnTabItemClickListenermOnTabItemClickListener;//定义一个监听tat点击事件的接口
public interfaceOnTabItemClickListener {
voidonTabItemClick(intposition, View view);
}
//注意实现它的set方法
public voidsetOnTabItemClickListener(OnTabItemClickListener listener) {
this.mOnTabItemClickListener= listener;
}
触发入口
view.setOnClickListener(newOnClickListener() {
@Override
public voidonClick(View v) {
mOnTabItemClickListener.onTabItemClick(finalI, v);
}
});
这种方式不需要实现接口
大家觉得常用哪种方式呢?