繁体   English   中英

带有复选框的Android自定义ListView

[英]Android Custom ListView with Checkbox

问候我的开发人员,我正在一个项目中,我有一个列表视图,其中每个项目包含2个文本视图和1个复选框,我的列表视图按我想要的方式工作,但当我在列表上以编程方式使用setSelection(some_index)时除外列表视图未选中以前的OnItemClickListener调用上的所有chechbox,我试图找出原因,但到目前为止没有运气,我确实尝试在每次滚动后检查并更改所有复选框。

for (int i = 0; i < listView.getCount(); i++) {
            View mChild = listView.getChildAt(i);
            View mChild1 = listView.getAdapter().getView(i, null, null);
            TextView name = (TextView) mChild.findViewById(R.id.contact_name);
            TextView phone = (TextView) mChild.findViewById(R.id.contact_number);
            CheckBox box = (CheckBox) mChild.findViewById(R.id.contact_check);
            if(contact.getName().equals(name.getText().toString()) && contact.getPhone().equals(phone.getText().toString()))
                box.setChecked(true);
        }

两种方法(mchild和mchild1)都不起作用,而且要花很多时间,因为我的列表视图可能会很长,(给出或占用500个项目)有关此问题的任何帮助,我在这方面一直陷入困境的日子,但无法提出任何可观的解决方案,我不明白的一件事是,为什么我的listview数据集在滚动时发生变化,没有任何帮助,有没有更简便,更快速的方法来执行此操作,然后遍历listview的子元素? 如果没有,那为什么我的迭代逻辑在这里不起作用是我的列表视图项

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:descendantFocusability="blocksDescendants"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/list_view_margin_vertical"
        android:layout_marginTop="@dimen/list_view_margin_vertical"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            android:id="@+id/contact_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/colorBlack"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" />

        <TextView
            android:id="@+id/contact_number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/colorGrey"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" />
    </LinearLayout>

    <CheckBox
        android:id="@+id/contact_check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="false"
        android:layout_gravity="center" />
</LinearLayout>

这是我的列表视图本身

<ListView
        android:id="@+id/contactsListView"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:divider="@color/colorAccent"
        android:dividerHeight="1dp"
        android:footerDividersEnabled="false" />

向我的程序员程序员打招呼,我发现listview或其工作没有问题,我没有注意到listview回收了子视图,在加载了每个回收视图的默认状态后都出现了提示,修复它所需要的是,当调用getView(适配器类)时,我们在视图上使用setText来加载和查看可能来自数据库的数据,因此需要对listview对象的结构进行布尔检查,并将该布尔值保存为默认值,现在每次单击onitem之后,当我们更改复选框状态时,我们也必须更改布尔检查值,现在,下次调用getview(由于回收或其他原因而调用天气)时,我们将从结构中获取布尔值并保存就像在复选框中一样,问题解决了,我了解到,在处理listview中的复选框或单选按钮时,我们必须对其进行布尔检查。 我们在适配器类的getView中设置的

暂无
暂无

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

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