通过获取图像视图的标签位置来设置图像资源 android

Setting image resourse by obtaining tag position for an imageview android

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

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

现在我使用 getTag 方法获取位置。但是现在我想在特定位置更改 heartButton 的图像。有没有类似

heartButton.getTag(位置).setImageResouce(drawable);

如果不是我该怎么做。

使用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.But 这仅在视图已移出视图时有效(我认为它是 scrapeview)

SetterGetterClass

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

    }
}