我知道之前已经问过这个问题并且大致了解了发生了什么,但我似乎无法找到解决方案。
在我的自定义列表适配器和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");
}
答案 0 :(得分:1)
您需要重置bookmark
图像资源&标记值将非空convertView
传递给getView
。您的onClick
处理程序正在将它们设置为以下值:
bookmark.setImageResource(R.drawable.ic_bookmarked);
bookmark.setTag(R.drawable.ic_bookmarked);
因此,在显示新的列表项时,您需要将它们重置为默认值。