-
Notifications
You must be signed in to change notification settings - Fork 4
内部元素添加点击事件
DONG edited this page Oct 24, 2019
·
2 revisions
元素内部添加点击事件步骤:
-
Provider
内部定义监听接口. -
Provider
内部onBind
方法中通过holder.setClick
绑定有点击事件的元素. -
Provider
内部覆写onClick
方法. 在其中添加点击逻辑. -
Activity/Fragment
实现监听接口, 并通过Adapter
传入对应Provider
.
以 Demo 当中复杂页面的按钮组 Section 为例子 - ButtonGroupProvider
:
public class ButtonGroupProvider extends BaseItemProvider {
// Provider 内部定义点击事件的接口.
// 让外部的 Activity/Fragment 去实现
public interface OnButtonGroupClickListener {
void onAddClick(); // 点击添加
void onRemoveClick(); // 点击移除
void onChangeClick(); // 点击更改
}
private OnButtonGroupClickListener mListener;
public ButtonGroupProvider(Context context) {
super(context);
}
@Override
public int getLayout() {
return R.layout.item_complex_button_group;
}
@Override
public void onBind(BaseViewHolder holder, IndexPath indexPath) {
// 将有点击事件的元素添加到 holder 中
holder.setClick(R.id.btn_add, this, indexPath);
holder.setClick(R.id.btn_remove, this, indexPath);
holder.setClick(R.id.btn_change, this, indexPath);
}
// 覆写 onClick 方法. 此方法中定义所有点击事件.
@Override
public void onClick(BaseViewHolder holder, IndexPath indexPath, int viewId) {
switch (viewId) {
case R.id.btn_add:
if (mListener != null) mListener.onAddClick();
break;
case R.id.btn_remove:
if (mListener != null) mListener.onRemoveClick();
break;
case R.id.btn_change:
if (mListener != null) mListener.onChangeClick();
break;
}
}
// 暴露给 Adapter 传入由 Activity/Fragment 实现的点击事件监听器
public void setListener(OnButtonGroupClickListener listener) {
this.mListener = listener;
}
}
在 Adapter 传入由 Activity/Fragment 实现的点击事件监听器. 有 2 种方式:
public class DemoAdapter extends BaseAdapter {
private ButtonGroupProvider mButtonGroupProvider;
public ComplexAdapter(Context context) {
super(context);
mButtonGroupProvider = new ButtonGroupProvider(context);
// 方式 1
mButtonGroupProvider.setListener((ButtonGroupProvider.OnButtonGroupClickListener) context);
finishInitialize();
}
// 方式 2. 额外实现一个公共 set 方法传递监听
public void setButtonGroupProviderListener(ButtonGroupProvider.OnButtonGroupClickListener listener) {
mButtonGroupProvider.setListener(listener);
}
// 其它省略代码
}