我正在使用回收者视图。我有一个用浅红色突出显示的布局,这个布局包含在recycler视图中的每个项目中。浅红色布局放置在背景图像上。我正在使用setTag方法来识别红色布局中按钮的点击次数。当我点击我获得位置时,这工作正常。问题是我想在特定位置更改图像。 例如:考虑心形按钮。我已经在上面设置了一个标签。
heartButton = findViewById(id); heartButton.setTag(位置);
现在我通过使用getTag方法得到了这个位置。但现在我想在一个特定的位置改变heartButton的图像。有什么像
heartButton.getTag(位置).setImageResouce(绘制);
如果不是我如何做到这一点。
答案 0 :(得分:1)
使用setBackgroundResource(R.drawable.XXX)
http://developer.android.com/reference/android/view/View.html#setBackgroundResource(int)
答案 1 :(得分:1)
正确的方法是, 您必须保持心脏按钮的状态存储在模型(POJO)中,并传递给自定义适配器。 e.g。
class ModelListItem{
public static final int HEART=1,BROKEN_HEART=2;
int heartButtonState;
}
现在在心脏按钮的onClick()中,使用位置从适配器获取该对象,我们已经知道如何从心脏按钮保留位置
ModelListItem item = (ModelListItem)adapter.getItem(position)
更改心形按钮的状态;
item.setHeartButtonState(ModelListItem.BROKEN_HEART);
adapter.notifyDatasetChanged();
你已经知道下面的解释,但以防万一 要正确地工作,在适配器的getView方法中,您需要检查heartButtonState();并使用适当的图像资源。
getView(BOILERPLATE){
BOILERPLATE
switch(item.getheartButtonState()){
case ModelItemList.HEART:
heartbutton.setImageResource(heart_image);
break;
case ModelItemList.BROKEN_HEART:
heartbutton.setImageResource(broken_heart_image);
break;
}
答案 2 :(得分:0)
我制作了一个自定义点击监听器,并在setter getter中更新了类似内容。但这只有在视图移出视图时才有效(我认为这是scrapeview)
Setter Getter Class
public class DemoData {
int background;
boolean liked;
public DemoData(int background) {
this.background = background;
}
public int getBackground() {
return background;
}
// public void setBackground(int background) {
// this.background = background;
// }
public boolean isLiked() {
return liked;
}
public void setLiked(boolean liked) {
this.liked = liked;
}
}
回收者视图的onBindViewHolder功能
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
background = (ImageView) holder.view.findViewById(R.id.image);
layout = (LinearLayout) holder.view.findViewById(R.id.layout);
delete = (ImageView) layout.findViewById(R.id.delete);
lock = (ImageView) layout.findViewById(R.id.lock);
delete.setTag("delete_"+position);
lock.setTag("lock_"+position);
if(Constants.demoDatas.get(position).isLiked()){
delete.setImageResource(R.drawable.ic_launcher);
}
else{
delete.setImageResource(android.R.drawable.ic_delete);
}
delete.setOnClickListener(new CustomClickListener(position));
lock.setOnClickListener(new CustomClickListener(position));
}
自定义点击监听器如下
public class CustomClickListener implements View.OnClickListener {
int position;
public CustomClickListener(int position) {
this.position = position;
}
@Override
public void onClick(View v) {
String tag = (String) v.getTag();
String identifier[] = tag.split("_");
// this line saves my state in the Setter Getter Class
Constants.demoDatas.get(position).setLiked(true);
}
}