Я пытаюсь добавить фильтр в свой адаптер recylerview. Я следую этому уроку https://www.androidhive.info/2017/11/android-recyclerview-with-search-filter-functionality/. Но я использую текст редактирования. Вот как я установил свой текст редактирования
<EditText
android:imeOptions="flagNoExtractUi"
android:hint="Search"
android:id="@+id/itemsearch"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
и вот как я настраиваю свой поиск
itemsearch.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
String text = itemsearch.getText().toString().toLowerCase(Locale.getDefault());
adapter_order.getFilter().filter(text);
Log.d("TEXT", text);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
});
и вот мой filter()
внутри моего адаптера
@Override
public Filter getFilter() {
Log.d("GO", "GO FILTER");
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
Log.d("MYS", charString);
if (charString.isEmpty()) {
listfilter = list;
} else {
List<Model_item> filteredList = new ArrayList<>();
for (Model_item row : list) {
if (row.getItemName().toLowerCase().contains(charString.toLowerCase()) || row.getItemCode().contains(charSequence)) {
filteredList.add(row);
}
}
listfilter = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = listfilter;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
listfilter = (ArrayList<Model_item>) filterResults.values;
notifyDataSetChanged();
}
};
}
но ничего не случилось. а мой Log.d
внутри filter()
не показывает
ОБНОВЛЕНИЕ ---
После некоторой попытки я могу отфильтровать объект, но столкнулся с проблемой Вот проблема:
По умолчанию у меня есть два предмета. Предмет A и Предмет B, затем я фильтрую, чтобы получить Предмет B. Но когда я щелкаю Пункт B, я получаю значение Предмета A
Вот мой клик.
mList.addOnItemTouchListener(new RecyclerItemClickListener(MainActivity.this, mList, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Model_item modelitem = itemList.get(position);
Model_order m_order = new Model_order(modelitem.getItemCode(),modelitem.getItemName(),modelitem.getItemPrice() , "1" );
if(contains( arrayOfOrders, modelitem.getItemCode())){
}else{
adapter_order.add(m_order);
}
}
@Override
public void onItemLongClick(View view, int position) {
Log.d("long", "POS " + 1);
}
}));
и я использую это https://gist.github.com/ashmeh6/915099545b96a536ad78a75b3b16daa6 (нашел его из SO ответа)