Java 通过获取imageview的标记位置来设置图像资源
我正在利用“回收者”视图。我有一个以浅红色突出显示的布局,该布局包含在回收器视图中的每个项目中。浅红色布局放置在背景图像上。我使用setTag方法来识别红色布局中按钮的点击。当我点击我得到这个位置时,它工作正常。问题是我想更改特定位置的图像。 例如:考虑心脏按钮。我像这样在上面贴了个标签 heartButton=findViewById(id); heartButton.setTag(位置)强> 现在我使用getTag方法获得位置。但是现在我想在一个特定的位置改变心脏按钮的图像。有类似的吗 heartButton.getTag(位置).setImageResource(可绘制)强> 如果没有,我该怎么做呢Java 通过获取imageview的标记位置来设置图像资源,java,android,listview,android-recyclerview,Java,Android,Listview,Android Recyclerview,我正在利用“回收者”视图。我有一个以浅红色突出显示的布局,该布局包含在回收器视图中的每个项目中。浅红色布局放置在背景图像上。我使用setTag方法来识别红色布局中按钮的点击。当我点击我得到这个位置时,它工作正常。问题是我想更改特定位置的图像。 例如:考虑心脏按钮。我像这样在上面贴了个标签 heartButton=findViewById(id); heartButton.setTag(位置) 现在我使用getTag方法获得位置。但是现在我想在一个特定的位置改变心脏按钮的图像。有类似的吗 hear
使用
setBackgroundResource(R.drawable.XXX)
正确的方法是,
您必须将心脏按钮的状态保存在模型(POJO)中,该模型将传递给自定义适配器。
e、 g
现在,在heart-button的onClick()中,使用position从适配器获取该对象,因为您已经了解了如何保持heart-button的位置
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;
}
我制作了一个自定义的点击监听器,并在setter getter中更新了类似的内容。但是,只有当视图被移出视图(我认为它是scrape视图)时,这才有效 Setter-Getter类
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);
}
}
我还是不明白。一个代码片段或示例会很好。
heartButton.setBackgroundResource(R.drawable.XXX)
methodsetTag()
和getTag()
用于在ViewContainer
或ViewGroup
中查找View
。你不需要在这里使用它,如果我想更改位于位置3的heartbutton的imageResource怎么办?我没有得到你的答案,你必须找到确切的答案。要按标记搜索视图
(一个heartButton),可以使用findViewWithTag(“标记”)
方法(查看类的静态方法)。但要小心,标签必须是唯一的。当您找到一个视图
(一个heartButton)时,您可以在其上调用setBackgroundResource()
方法。正如我所说,标记必须是唯一的,所以请尝试如下设置标记:for heart useheart.setTag(“heart_uu3;”+position)代码>,对于箭头使用arrow.setTag(“arrow_quo+position)
等。我在Recycler的适配器中找不到getItem()。上述解决方案工作正常,但图像不会立即更新,只有在我们滚动recyclerView时才会更新。有人知道吗???Sagar,上述解决方案与我的asnwer相同,只在setlike()及其完成后添加notify dataset
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);
}
}