无法在我的自定义适配器中进行过滤

时间:2018-09-03 04:56:46

标签: android android-arrayadapter

我正在尝试向我的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答案中找到它)

0 个答案:

没有答案