通过获取imageview android的标记位置来设置图像资源
我正在利用回收者的观点。 我有一个以浅红色突出显示的布局,这个布局包含在recycler视图中的每个项目中。 浅红色布局放置在背景图像上。 我正在使用setTag方法来识别红色布局中按钮的点击次数。 当我点击我获得位置时,这工作正常。 问题是我想在特定位置更改图像。 例如:考虑心形按钮。 我已经像这样设置了一个标签。
heartButton = findViewById(id); heartButton.setTag(位置);
现在我通过使用getTag方法获得位置。 但现在我想在一个特定的位置改变heartButton的图像。 是否有类似的东西
heartButton.getTag(位置).setImageResouce(绘制);
如果不是我如何做到这一点。
使用setBackgroundResource(R.drawable.XXX)
http://developer.android.com/reference/android/view/View.html#setBackgroundResource(int)
正确的方法是,您必须保持心脏按钮的状态存储在模型(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); } }