Android listview getView checkBox

时间:2016-08-08 14:43:03

标签: android listview

发生了一些奇怪的事情,当我点击列表中的一行时,也会选中相应的复选框。所以一切都是正确的,但奇怪的是,每隔7行,复选框setcheked为true。 有什么问题?谢谢你的帮助

 ListAdapter adapter = new ArrayAdapter<Dettaglio1>
            (this, R.layout.deteails_list_pdf, R.id.tv_nome_categoria, dettagli1) {
 @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            View row = super.getView(position, convertView, parent);
...
...
 list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    final Dettaglio1 d1 = dettagli1.get(position);

                    d1.setChecked(!d1.isChecked());

                    CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBox2);
                    checkBox.setChecked(d1.isChecked());

                }
            });
            return row;
        }
    };
    list.setAdapter(adapter);
private class Dettaglio1 {
    String nome;

    private boolean isChecked;

    public void setChecked(boolean isChecked) {
        this.isChecked = isChecked;
    }

    public boolean isChecked() {
        return isChecked;
    }
}

1 个答案:

答案 0 :(得分:1)

正在发生的事情被称为查看回收 - ListViewRecyclerView背后的核心机制。每隔7个CheckBox进行一次检查,因为它与之前的状态一样,会被回收并显示相同的CheckBox

要解决您的问题,您需要在数据模型(Dettaglio1类)中保持“已检查”状态。例如,您可以像这样修改数据模型:

public class Dettaglio1 {
    // stuff
    private boolean isChecked;

    public void setChecked(boolean isChecked) {
        this.isChecked = isChecked;
    }

    public void isChecked() {
        return isChecked;
    }
    // more stuff
}

你的听众如此:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    final Dettaglio1 d1 = dettagli1.get(position);
    d1.setChecked(!d1.isChecked());

    CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBox2);
    checkBox.setChecked(d1.isChecked());
}

修改 您还需要覆盖适配器的getView()方法,并根据当前位置的CheckBox设置Dettaglio1的已检查状态。