向我的同事们问候, 我正在开发一个项目,其中我有一个listview包含2个textviews和每个项目1个复选框, 我的listview正在工作,因为我想要它,除了当我在列表视图上以编程方式使用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的孩子进行itetrating? 如果没有那么为什么我的迭代逻辑不起作用 这是我的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" />
答案 0 :(得分:0)
问候我的fello程序员, 我发现列表视图或其工作没有任何问题,我没有注意到listview循环查看子视图,在每个循环默认状态的视图加载后,hense, 修复它所需要的只是, 当getView(适配器类)正在调用时,我们在视图上使用setText来加载和查看可能来自数据库的数据,需要在listview对象的结构中进行布尔检查, 并将该布尔值保存为默认值, 现在每次onitem点击后,当我们更改复选框状态时,我们也必须更改布尔检查值,现在下次调用getview(由于回收或其他原因调用天气)我们将从结构中获取布尔值并保存就像它在复选框中一样 问题解决了, 我了解到,在处理listview中的复选框或单选按钮时,我们必须对它进行布尔检查。我们在适配器类的getView中设置