单击ListView时,项目ImageButton可绘制更改似乎一次更改2个项目

时间:2015-09-22 20:35:57

标签: android android-listview imagebutton

我知道之前已经问过这个问题并且大致了解了发生了什么,但我似乎无法找到解决方案。

在我的自定义列表适配器和public View getView(int position, View convertView, ViewGroup parent) {内部,为项目ImageButton设置了一个点击功能。

final ImageButton bookmark = (ImageButton)
convertView.findViewById(R.id.bookmarkthis);
        bookmark.setTag(position);
        bookmark.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                bookmark.setImageResource(R.drawable.ic_bookmarked);
                bookmark.setTag(R.drawable.ic_bookmarked);

}

});

图像按钮是一颗清晰的恒星,当点击它时,它会将相同的可绘制更改为黄色星形。它运作正常。

问题是当我点击位置0星形图标中的项目以使其变为黄色时,它也会在列表中进一步向下更改,而不是在视图中。如果我点击位置1也会改变位置9,依此类推。

我浏览了一下并研究了这个问题,甚至尝试了Imagebutton的持有人,但没有去。有些事情阻止了ImageButton的可绘制更改到正确的位置。

由于

解决方案最初是为每个项目在数组中设置一个标记项。然后onClick将该标志设置为true,仅适用于该项目。然后在getView中,它只是一个if语句的情况,用于检查标记为Items get Cycled。

//in array creation
items.setFlag("false");

//in getView as you set Text and what ever get the Flag state
String flag = m.getFlag();

 //check the flag state and take action in this case change the icon accordingly
 if (Objects.equals(flag, "true")) {
            bookmark.setImageResource(R.drawable.ic_bookmarked);
            bookmark.setTag(R.drawable.ic_bookmarked);
        }

        else {
            bookmark.setImageResource(R.drawable.ic_bookmark);
        }


// and in the click function
           @Override
                public void onClick(View v) {

                    bookmark.setImageResource(R.drawable.ic_bookmarked);
                    m.setFlag("true");

    }

1 个答案:

答案 0 :(得分:1)

您需要重置bookmark图像资源&标记值将非空convertView传递给getView。您的onClick处理程序正在将它们设置为以下值:

bookmark.setImageResource(R.drawable.ic_bookmarked);
bookmark.setTag(R.drawable.ic_bookmarked);

因此,在显示新的列表项时,您需要将它们重置为默认值。