使用Edittext在ListView中搜索

时间:2017-06-19 06:54:32

标签: android listview

我创建了一个包含多个项目的列表视图。每行,具有输入样式的Edittext是数字,Textview显示listview中所有editext的总值。我上面还创建了一个搜索框。我想根据列表的特定字段实现搜索功能。我怎样才能做到这一点?任何帮助将不胜感激。 像那样:
example

2 个答案:

答案 0 :(得分:0)

试试这个

searchView.setOnEditorActionListener(new EditText.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId,
                                  KeyEvent event) {
        return true;
    }
});
addTextChangeListener();

现在创建此方法

    private void addTextChangeListener() {
searchView.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence query, int start, int before, int count) {

        query = query.toString().trim().toLowerCase();

        final ArrayList<CityDataModel> filteredList = new ArrayList<>();



        final CharSequence finalQuery = query;
        new Thread(new Runnable() {
            @Override
            public void run() {

                // Clear the filter list
                filteredList.clear();

                // If there is no search value, then add all original list items to filter list
                if (TextUtils.isEmpty(finalQuery)) {

                    filteredList.addAll(cities);

                } else {
                    // Iterate in the original List and add it to filter list...
                    for (CityDataModel item : cities) {
                        if (item.getCity_name().toLowerCase().contains(finalQuery.toString().toLowerCase())
                                ) {
                            // Adding Matched items
                            filteredList.add(item);
                        }
                    }
                }

                // Set on UI Thread
                ((Activity) context).runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // Notify the List that the DataSet has changed...
                        adapter = new SearchCityAdapter(SearchCityClass.this, filteredList);
                        recyclerSearchCity.setAdapter(adapter);
                    }
                });

            }
        }).start();


    }

    @Override
    public void afterTextChanged(Editable s) {

    }
});

}

答案 1 :(得分:0)

编辑文本更改时间将发生此方法。这是我的样本。你可以修改为你自己。

 et_search.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) {
//                                    professional_add_List.contains(s);
                                }

                                @Override
                                public void afterTextChanged(Editable s) {
//                                    String text = et_search.getText().toString().toLowerCase(Locale.getDefault());
                                    addpartnerAdapter.getFilter().filter(s.toString());

                                    if (addpartnerAdapter.isEmpty()) {
                                        lst_professional.setVisibility(View.GONE);
                                        txt_identifier.setVisibility(View.VISIBLE);
                                    } else {
                                        lst_professional.setVisibility(View.VISIBLE);
                                        txt_identifier.setVisibility(View.GONE);
                                    }
                                }
                            });