如何解决如何在 BaseRecyclerAdapter 中设置 itemclick 侦听器
public abstract class BaseRecyclerViewAdapter extends RecyclerView.Adapter<BaseViewHolder> {
public @NotNull BaseViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
ViewDataBinding binding = DataBindingUtil.inflate(layoutInflater,viewType,parent,false);
return new BaseViewHolder(binding);
}
public void onBindViewHolder(BaseViewHolder holder,int position) {
Object obj = getobjForPosition(position);
OnItemClickListener clickListener = onItemClickListener();
holder.bind(obj,clickListener,position);
}
@Override
public int getItemViewType(int position) {
return getLayoutIdForPosition(position);
}
protected abstract Object getobjForPosition(int position);
protected abstract int getLayoutIdForPosition(int position);
protected abstract OnItemClickListener onItemClickListener();
}
OnItemClickListener
:
public interface OnItemClickListener {
void onItemClick(Object object,View view,int position);
}
基本视图持有者是:
public class BaseViewHolder extends RecyclerView.ViewHolder {
private final ViewDataBinding binding;
public BaseViewHolder(ViewDataBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
public void bind(Object obj,OnItemClickListener clickListener,int position) {
itemView.setonClickListener(v -> clickListener.onItemClick(obj,itemView,position));
binding.setvariable(BR.obj,obj);
binding.executePendingBindings();
}
}
假设 ViewHolder 有 2 个视图,一个 TextView 和一个 ImageView。如何为 ViewHolder 的 itemview 内的所有项目实现 ClickListener
解决方法
我认为我们无法为基本适配器中的 itemView 中的特定项目设置 clickListener。而是我们可以将布局的侦听器设置为变量。
为此在布局中的数据标记中定义 clickListener 变量。
<data>
<variable
name="clickListener"
type="com.package.clickListener" />
</data>
然后为基本适配器的布局设置 clickListener
public void bind(Object obj,OnItemClickListener clickListener,int position) {
itemView.setOnClickListener(v -> clickListener.onItemClick(obj,itemView,position));
binding.setVariable(BR.clickListener,clickListener)//set listener here
binding.setVariable(BR.obj,obj);
binding.executePendingBindings();
}
然后您可以在单击特定项目时调用侦听器方法。
<Button
android:id="@+id/btn"
android:onClick="@{()-> callListener.onItemClick()}"
/>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。