我有一个自定义列表视图和一个自定义适配器。
单击此ListView的行时,TextView的文本设置为白色,该行的背景设置为黑色。
一切都很好,但当点击一行时,其他行的背景颜色也设置为黑色,当上下滚动时,所有行都会混乱起来。
自定义适配器中的getView()

public View getView(final int position, View convertView, ViewGroup parent) {
    final ListItem holder;
    View vi=convertView;

    if(vi==null){
        vi = inflater.inflate(R.layout.list, null);
        holder = new ListItem();
        holder.nametext= (TextView) vi.findViewById(R.id.name);
        vi.setTag(holder);

    }else{
        holder = (ListItem) vi.getTag();
    }

    holder.nametext.setText(""+item.name);
    return vi;
}

主要活动:
CustomAdapter listadapter = new CustomAdapter(context, R.layout.list, items);
list.setAdapter(listadapter);

    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> adapter, View view, int position, long arg){
               TextView v = (TextView) view.findViewById(R.id.name);
               view.setBackgroundColor(Color.BLACK);
               v.setTextColor(Color.WHITE);
        }

    });

我尝试在getview()中插入setOnEmClickListener,但也没有成功。
有什么帮助吗?谢谢。

最佳答案

自定义列表视图“创建”仅用于显示行的视图,当向下滚动下一个显示行时,将像第一个显示行一样受到影响。
若要防止此问题,需要在单击的列表项中创建布尔字段;
然后单击视图时,在getview()中将item.clicked设置为true。

final ListItem item = items.get(position);


List<ListItem> items;

作为适配器的变量
实施:
您需要在getview()中设置setOnClickListener,如下所示
vi.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View arg1) {

            if(previousView!=null){
                ListItem previousItem = items.get(previousPosition);
                previousItem.Clicked = false;
            }

            item.Clicked = true;
            previousView = arg1;
            previousPosition = position;
            notifyDataSetChanged();
        }

    });



    if(!item.isClicked){
        holder.nametext.setTextColor(Color.BLACK);
        vi.setBackgroundColor(Color.WHITE);
    }else{
        holder.nametext.setTextColor(Color.WHITE);
        vi.setBackgroundColor(Color.BLACK);
    }

});

07-28 02:18
查看更多