我几乎有一个列表视图,如果你按一个按钮,另一个是改为暗灰色图像。代码在单个级别上正常工作,但由于某种原因,每个第4个列表项都会复制该操作。这是getItemView代码! (顺便说一下,我确实尝试将图像按钮设为本地!)
ImageButton thumbsUpButton;
ImageButton thumbsDownButton;
@Override
public View getItemView(FactListParseObject factRow, View v,
ViewGroup parent) {
if (v == null) {
v = View.inflate(getContext(), R.layout.fact_list_row, null);
}
super.getItemView(factRow, v, parent);
setTexts(v, factRow);
thumbsUpButton = (ImageButton) v.findViewById(R.id.thumbsup);
thumbsDownButton = (ImageButton) v.findViewById(R.id.thumbsdown);
if (thumbsDownButton != null&& thumbsUpButton!=null) {
thumbsUpButton.setTag(false);
thumbsDownButton.setTag(false);
thumbsUpButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if((boolean)thumbsUpButton.getTag()==true){
thumbsUpButton
.setImageResource(R.drawable.thumbsup);
thumbsUpButton.setTag(false);
}
if ((boolean)thumbsDownButton.getTag() == false) {
// thumbsdown not currently disabled
thumbsDownButton
.setImageResource(R.drawable.thumbsdowndisabled);
thumbsDownButton.setTag(true);
} else {
// thumbsdown is disabled
thumbsDownButton.setImageResource(R.drawable.thumbsdown);
thumbsDownButton.setTag(false);
}
}
});
thumbsDownButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("called","howmany");
if((boolean)thumbsDownButton.getTag()==true){
thumbsDownButton
.setImageResource(R.drawable.thumbsdown);
thumbsDownButton.setTag(false);
}
if ((boolean)thumbsUpButton.getTag() == false) {
// thumbsdown not currently disabled
thumbsUpButton
.setImageResource(R.drawable.thumbsupdisabled);
thumbsUpButton.setTag(true);
} else {
// thumbsdown is disabled
thumbsUpButton.setImageResource(R.drawable.thumbsup);
thumbsUpButton.setTag(false);
}
}
});
}
return v;
}
答案 0 :(得分:0)
因为ListView回收视图,所以第四个是回收的... 所以你必须重置"列表中每个项目的状态(在您的情况下是按钮的颜色)(或者换句话说,列表视图中的每个单元格)...
顺便说一句。方法名称是getView而不是getItemView()
在这里,您可以找到一个抽象的基本适配器类,它可以帮助您更好地处理"生命周期"列表视图单元格: https://github.com/sockeqwe/appkit/blob/master/adapter/src/main/java/com/hannesdorfmann/appkit/adapter/SimpleAdapter.java
这个想法是有两个关键方法:
newView()
在这里,您可以从布局中扩展视图并设置ViewHolder模式。bindView()
在这里,您可以将视图单元格(可以是已回收的或来自newView()
的新创建的)绑定到您的数据对象,该数据对象应该"填充"具有所需数据的单元格。所以这里应该设置按钮的颜色......