列出项目链接android

时间:2014-08-15 21:06:58

标签: android listview

我几乎有一个列表视图,如果你按一个按钮,另一个是改为暗灰色图像。代码在单个级别上正常工作,但由于某种原因,每个第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;
}

1 个答案:

答案 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()的新创建的)绑定到您的数据对象,该数据对象应该"填充"具有所需数据的单元格。所以这里应该设置按钮的颜色......