Android:每9天更改1个listview条目的颜色

时间:2018-06-13 16:57:59

标签: android listview adapter

我正在写一个小的android应用程序。 我有一个listview的问题。 单击条目时,应将数据结构的状态标记为已选择或未选中。在数据结构中,一切都很好,但应通过更改条目的背景颜色来显示选择。 到目前为止一切都那么好,但是点击后正确的元素改变了它的颜色,但是每9个元素(条目0点击 - >改变了颜色,还有条目8,条目16等等)列表视图,但我不明白为什么。

问题:为什么不仅被点击的条目改变了颜色。?

这是我的getView代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View listItem = convertView;
    if (listItem == null)
        listItem = LayoutInflater.from(mContext).inflate(R.layout.listitem, parent, false);

    final User currentUser = userList.get(position);

    TextView username = listItem.findViewById(R.id.lv_username);
    String state = "disabled";
    if(currentUser.getSelected()) state = "enabled";
    username.setText(currentUser.getUsername() + " - " + state);
    listItem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            currentUser.setSelected(!currentUser.getSelected());
            if (currentUser.getSelected()) {
                Log.d("onClick in Adapter", "selected");
                v.setBackgroundColor(Color.WHITE);
            }
            else {
                Log.d("onClick in Adapter", "not selected");
                v.setBackgroundColor(Color.TRANSPARENT);
            }
            notifyDataSetChanged();
        }
    });
    return listItem;
}

2 个答案:

答案 0 :(得分:2)

这就是回收视图的工作方式,因为之前使用的是不可见的视图,所有状态都会被保留,所以当重新使用时它会被着色(请注意,如果单击它将不会变为透明,但点击两次将会因为数据结构完好无损)。

解决方案是始终将状态重新应用于即将变为可见的视图。

if (listItem == null)
    listItem = LayoutInflater.from(mContext).inflate(R.layout.listitem, parent, false);
listItem.setBackgroundColor(currentUser.getSelected() ? Color.WHITE : Color.TRANSPARENT);

答案 1 :(得分:0)

你试过吗,在getview中获取位置检查是否等于9,然后改变该行的背景颜色。

if (position==9){
            convertView.setTextColor(Color.RED);
}