在Android ListView中查看不重绘

Leo*_*oon 5 android listview

我有一个Android ListView,它包含一个点击时需要检查的按钮.click事件似乎正在起作用:

public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;

    LayoutInflater inflater = this._context.getLayoutInflater();

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.checkbox_cell, null);
        holder = new ViewHolder();
        holder.checkbox = (CheckBox) convertView.findViewById(R.id.button);
        holder.textView = (TextView) convertView.findViewById(R.id.textView);
        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }


    if(holder.checkbox.isChecked()) {
        convertView.setBackgroundColor(Color.RED);
        holder.textView.setBackgroundColor(Color.RED);
        convertView.invalidate();
    } else {
        convertView.setBackgroundColor(Color.GREEN);
    }

    holder.checkbox.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            Arrays.sort(_context.checkBoxIds);
            int index = Arrays.binarySearch(_context.checkBoxIds, position);

            if (((CheckBox) v).isChecked()) {
                holder.textView.setPaintFlags(holder.textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

            } else {
                holder.textView.setPaintFlags(holder.textView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
            }
            holder.textView.setBackgroundColor(Color.RED);
            notifyDataSetChanged();

        }
    });

    return convertView;
}
Run Code Online (Sandbox Code Playgroud)

正如您可能看到我将背景更改为绿色初始,当我单击"复选框"时,背景需要为红色(这只是一个测试,以查看UI是否更新).我试图更新中的视图onClick,但那也不起作用.在onClick我打电话之后notifyDataSetChanged()看看UI是否会在刷新时发生变化.在holder.checkbox.isChecked()似乎是真实的,但是当我的背景设置为红色的UI将不会更新.有谁知道这里出了什么问题?我此刻毫无头绪.

Eug*_*nov 2

您应该根据您的数据表示来更新视图。但是,您正在根据以前从未设置过的复选框视图状态来更新视图。

因此,您应该首先根据与职位相关的部分数据更新复选框,然后进一步使用它