Android Recyclerview点击事件处理最佳实践?
在Recyclerview中有许多处理单击事件的方法,但就性能和最小化错误而言,我不知道最好的方法 我看到的第一种方法是在Android Recyclerview点击事件处理最佳实践?,android,android-recyclerview,Android,Android Recyclerview,在Recyclerview中有许多处理单击事件的方法,但就性能和最小化错误而言,我不知道最好的方法 我看到的第一种方法是在onBindViewHolder方法中处理单击事件 @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int postion) { holder.button.setOnClickListener(new View.OnClickList
onBindViewHolder
方法中处理单击事件
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int postion) {
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Add action
}
});
}
@Override
public Viewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(item_adapter, parent, false);
final ViewHolder holder = new ViewHolder(v);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Add action
}
});
return holder;
}
第二种方法是在onCreateViewHolder
方法中处理单击事件
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int postion) {
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Add action
}
});
}
@Override
public Viewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(item_adapter, parent, false);
final ViewHolder holder = new ViewHolder(v);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Add action
}
});
return holder;
}
第三种方法是使用界面,将信息发送到MainActivity
或fragment,并在MainActivity
或fragment中处理单击事件
哪种方法更好?在ViewHolder类+界面中处理单击事件是最好的做法 这里有一个例子
interface ClickListener{
fun onItemClick(position:Int,item:Forecast)
}
var clickListener:ClickListener?= null
inner class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView)
{
init {
itemView.r_forecast_tv_forecast.setOnClickListener {
val position = adapterPosition
val model = data[position]
clickListener?.onItemClick(position,model)
}
}
}
我更喜欢的干净方式是在onBindViewHolder中为项目设置标记,并在View类中接收相同的标记数据
@Override
public void onBindViewHolder(myViewHolder viewHolder, int position) {
viewHolder.button.setTag(position); //Here we are setting a position integer
viewHolder.button.setTag(object); //set any custom object this way
}
在视图/Activity/Fragment类中接收标记并获取数据
@Override
public void onClick(View view) {
int position = (int) view.getTag();
Log.e("DEMO","Position"+position)
if(view.getTag() instanceOf Object) {
Object object = (Object) view.getTag();
Log.e("DEMO","Position"+obect.getName())
}
我更喜欢界面方式界面。。。。谷歌最佳实践。我不喜欢你发布的两种方法。我更喜欢使用界面,即使你使用界面的方式,你也需要处理点击事件