繁体   English   中英

Android ListView getView复选框

[英]Android listview getView checkBox

当我单击列表中的一行时,发生了奇怪的事情,相应的复选框也被选中。 因此,一切都正确,但是奇怪的是,复选框每隔7行自动将其设置为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;
    }
}

发生的事情称为视图回收 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()方法,并根据Dettaglio1在当前位置设置CheckBox的选中状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM