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