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

时间:2015-01-20 12:14:18

标签: java android listview android-recyclerview

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

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

现在我通过使用getTag方法得到了这个位置。但现在我想在一个特定的位置改变heartButton的图像。有什么像

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

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

image

3 个答案:

答案 0 :(得分:1)

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

    }
}