【发布时间】:2020-08-01 23:46:18
【问题描述】:
我正在尝试在扩展 ListAdapter 的适配器类中实现搜索功能。我没有使用RecyclerAdapter,而是使用ListAdapter。在搜索字段的主要活动中,我使用EditText 和addTextChangedListener。我有这个例外:
这是我的代码:
public class NoteAdapter extends ListAdapter<Note, NoteAdapter.NoteHolder> implements Filterable {
private List<Note> mNoteListInit;
private OnItemClickListener mListener;
public NoteAdapter() {
super(DIFF_CALLBACK);
exampleListFull = new ArrayList<>(getCurrentList());
}
@Override
public Filter getFilter() {
return exampleFilter;
}
public void setInitList(List<Note> noteList) {
mNoteListInit = new ArrayList<>(noteList);
}
private Filter exampleFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<Note> filteredList = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
filteredList.addAll(mNoteListInit);
} else {
String filterPattern = constraint.toString().toLowerCase().trim();
for (Note note : mNoteListInit) {
if (note.getTitle().toLowerCase().contains(filterPattern)) {
filteredList.add(note);
}
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = filteredList;
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
submitList((List) results.values);
}
};
在 MainActivity 中:
mEditTextToolbarSearch.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) { }
@Override
public void afterTextChanged(Editable s) {
noteAdapter.getFilter().filter(s.toString());
}
});
mNoteViewModel.getAllNotes().observe(this, new Observer<List<Note>>() {
@Override
public void onChanged(List<Note> notes) {
noteAdapter.submitList(notes);
noteAdapter.setInitList(noteAdapter.getCurrentList());
}
});
【问题讨论】:
-
getCurrentList()有问题,请分享这个方法 -
这是你在Adapter类中扩展ListAdapter的方法,例如:
public class NoteAdapter extends ListAdapter<Note, NoteAdapter.NoteHolder> implements Filterable {
标签: java android adapter listadapter