gpt4 book ai didi

android - Android RecyclerView 中 setTag(...)/getTag(...) 的缺点和替代方案

转载 作者:行者123 更新时间:2023-11-29 17:25:46 33 4
gpt4 key购买 nike

我的目标(为了一个简单的例子)是检测对 LinearLayout 内的 ImageView 的点击。使用 RecyclerView 设置一个项目列表,每个项目都由一个 LinearLayout 表示。

public class SomeRecyclerAdapter extends RecyclerView.Adapter<SomeRecyclerAdapter.SomeListViewHolder> {

....

@Override
public void onBindViewHolder(final SomeViewHolder holder, final int position) {
SomeItem item = someList.get(position);

holder.vImage.setTag(item);
holder.vImage
.setOnClickListener(new CompoundButton.OnClickListener(){

@Override
public void onClick(View v) {
SomeListItem item = (SomeItem) holder.vImage.getTag();
Toast.makeText(context, item.getName() + " Image Clicked", Toast.LENGTH_SHORT).show();
}
});
....

public static class SomeListViewHolder extends RecyclerView.ViewHolder{
protected ImageView vImage;

public SomeListViewHolder(View itemView) {
super(itemView);
vImage = (ImageView) itemView.findViewById(R.id.tem_some_list);
}

}

}

这种方法工作正常,但是,尽管我没有足够的知识来说明这一点,但它似乎不是一个有效的实现。

我尝试使用 onInterceptTouchEvent 实现此功能,但我只能点击 LinearLayout,这意味着该项目,而不是按钮(在本例中为图像)。

请让我知道如果我写的是错误的或错误的假设,以及是否有替代我想要的东西。

最佳答案

将项目绑定(bind)到 viewholders 并让 ViewHolders 自己处理点击。像这样:

public class SomeItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private final ImageView mImg;
private SomeItem mBoundItem;

public SomeItemViewHolder(View view) {
mImg = view.findViewById(R.id.imageId);
mImg.setOnClickListener(this);
}
...
public void bind(SomeItem item) {
mBoundItem = item;
// Update the ViewHolder to the item's specifications.
}

@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), mBoundItem.getName() + " Image Clicked", Toast.LENGTH_SHORT).show();
}
}

然后,在适配器中调用它即可。

@Override
public void onBindViewHolder(SomeItemViewHolder holder, int position) {
SomeItem item = someList.get(position);
holder.bind(item);
}

关于android - Android RecyclerView 中 setTag(...)/getTag(...) 的缺点和替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34745878/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com