Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过获取imageview的标记位置来设置图像资源_Java_Android_Listview_Android Recyclerview - Fatal编程技术网

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

Java 通过获取imageview的标记位置来设置图像资源,java,android,listview,android-recyclerview,Java,Android,Listview,Android Recyclerview,我正在利用“回收者”视图。我有一个以浅红色突出显示的布局,该布局包含在回收器视图中的每个项目中。浅红色布局放置在背景图像上。我使用setTag方法来识别红色布局中按钮的点击。当我点击我得到这个位置时,它工作正常。问题是我想更改特定位置的图像。 例如:考虑心脏按钮。我像这样在上面贴了个标签 heartButton=findViewById(id); heartButton.setTag(位置) 现在我使用getTag方法获得位置。但是现在我想在一个特定的位置改变心脏按钮的图像。有类似的吗 hear

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

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

现在我使用getTag方法获得位置。但是现在我想在一个特定的位置改变心脏按钮的图像。有类似的吗

heartButton.getTag(位置).setImageResource(可绘制)

如果没有,我该怎么做呢


使用
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)
method
setTag()
getTag()
用于在
ViewContainer
ViewGroup
中查找
View
。你不需要在这里使用它,如果我想更改位于位置3的heartbutton的imageResource怎么办?我没有得到你的答案,你必须找到确切的答案。要按标记搜索
视图
(一个heartButton),可以使用
findViewWithTag(“标记”)
方法(查看类的静态方法)。但要小心,标签必须是唯一的。当您找到一个
视图
(一个heartButton)时,您可以在其上调用
setBackgroundResource()
方法。正如我所说,标记必须是唯一的,所以请尝试如下设置标记:for heart use
heart.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);

    }
}