通过获取imageview android的标记位置来设置图像资源

我正在利用回收者的观点。 我有一个以浅红色突出显示的布局,这个布局包含在recycler视图中的每个项目中。 浅红色布局放置在背景图像上。 我正在使用setTag方法来识别红色布局中按钮的点击次数。 当我点击我获得位置时,这工作正常。 问题是我想在特定位置更改图像。 例如:考虑心形按钮。 我已经像这样设置了一个标签。

heartButton = findViewById(id); heartButton.setTag(位置);

现在我通过使用getTag方法获得位置。 但现在我想在一个特定的位置改变heartButton的图像。 是否有类似的东西

heartButton.getTag(位置).setImageResouce(绘制);

如果不是我如何做到这一点。

图片

正确的方法是,您必须保持心脏按钮的状态存储在模型(POJO)中,并传递给自定义适配器。 例如

 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; } 

我创建了一个自定义点击监听器,并在setter getter中更新了类似的东西。但这只有在视图移出视图时才有效(我认为是scrapeview)

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; } } 

回收站视图的onBindViewHolderfunction

 @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); } }