我正在尝试向我的recylerview适配器添加过滤器。我正在关注本教程https://www.androidhive.info/2017/11/android-recyclerview-with-search-filter-functionality/。但是,我正在使用edittext。这是我设置我的edittext的方式
<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的值
这是我的onclick。
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答案中找到它)