向我的开发者致以问候 我正在开展一个项目,我必须处理联系人列表, 我创建了一个联系人列表视图和一个EditText用于搜索目的, 除了搜索之外,我的ListView正如我所期望的那样工作 这是我的列表视图
\t
这是我的listviewitem
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
<EditText
android:id="@+id/contacts_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableEnd="@drawable/ic_search"
android:drawableRight="@drawable/ic_search"
android:hint="@string/contacts_search"
android:maxLines="1" />
<ListView
android:id="@+id/contactsListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@color/colorAccent"
android:dividerHeight="1dp"
android:footerDividersEnabled="false" />
</LinearLayout>
我正在使用
<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">
<ImageView
android:id="@+id/contact_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/contacts_image"
android:layout_gravity="center" />
<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:textAppearance="@style/Base.TextAppearance.AppCompat.Large"
android:textColor="@color/colorBlack" />
<TextView
android:id="@+id/contact_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
android:textColor="@color/colorGrey" />
</LinearLayout>
<CheckBox
android:id="@+id/contact_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:clickable="false" />
</LinearLayout>
在我的适配器类中,我有getfilter函数,它不能正常工作
SEARCH.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
contactAdapter.getFilter().filter(s); // not working,throwing exception when i do CONTACTS.get(position); in adapter getview()
}
});
但是我无法获得搜索视图的结果,它在索引超出绑定异常时崩溃,在适配器类的getView()中我正在尝试CONTACTS.get(position), 任何帮助都是适当的
答案 0 :(得分:0)
向我的同事们问候, 所以我想我找到了解决问题的方法,我认为这也是最佳解决方案, 我已经在我的适配器类
中对getFilter函数进行了一些更改@NonNull
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint.length() == 0) {
results.count = ORIGNAL.size();
results.values = ORIGNAL;
} else if (constraint.length() > 0) {
List<Contact> filtered = new ArrayList<>();
for (Contact contact : ORIGNAL) {
if (contact.getName().toLowerCase().contains(constraint)) {
filtered.add(contact);
}
}
results.count = filtered.size();
results.values = filtered;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (constraint.length() == 0) {
CONTACTS.clear();
CONTACTS.addAll(ORIGNAL);
} else if (constraint.length() > 0) {
CONTACTS.clear();
CONTACTS.addAll((ArrayList<Contact>) results.values);
}
notifyDataSetChanged();
}
};
}
另外一件事我发现id我用简单的赋值运算符指定我的orignal arraylist&#34; =&#34;它传递了联系人数组的地址, 我已经使用这些行在我的适配器构造函数
中分配我的orignal数组this.ORIGNAL = new ArrayList<>();
this.ORIGNAL.addAll(contacts);
我认为这是搜索自定义列表视图的唯一简单且最快捷的方式,但如果你们中的任何人认为有更好的方法,请在下面分享。