gpt4 book ai didi

android - ListView 过滤器 Android

转载 作者:IT老高 更新时间:2023-10-28 13:07:00 27 4
gpt4 key购买 nike

我在 android 中创建了一个 ListView ,我想在列表上方添加编辑文本,当用户输入文本时,列表将根据用户输入进行过滤

谁能告诉我是否有办法在 android 中过滤列表适配器?

最佳答案

在其 .xml 布局文件中的 ListView 顶部添加一个 EditText。在你的 Activity/fragment 中..

lv = (ListView) findViewById(R.id.list_view);
inputSearch = (EditText) findViewById(R.id.inputSearch);

// Adding items to listview
adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products);
lv.setAdapter(adapter);
inputSearch.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
MainActivity.this.adapter.getFilter().filter(cs);
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { }

@Override
public void afterTextChanged(Editable arg0) {}
});

这里的基本操作是在您的编辑文本中添加一个 OnTextChangeListener,并在其回调方法中将过滤器应用到您的 ListView 的适配器。

编辑

要将过滤器过滤到您的自定义 BaseAdapter,您需要实现 Filterable 接口(interface)。

class CustomAdapter extends BaseAdapter implements Filterable {

public View getView(){
...
}
public Integer getCount()
{
...
}

@Override
public Filter getFilter() {

Filter filter = new Filter() {

@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {

arrayListNames = (List<String>) results.values;
notifyDataSetChanged();
}

@Override
protected FilterResults performFiltering(CharSequence constraint) {

FilterResults results = new FilterResults();
ArrayList<String> FilteredArrayNames = new ArrayList<String>();

// perform your search here using the searchConstraint String.

constraint = constraint.toString().toLowerCase();
for (int i = 0; i < mDatabaseOfNames.size(); i++) {
String dataNames = mDatabaseOfNames.get(i);
if (dataNames.toLowerCase().startsWith(constraint.toString())) {
FilteredArrayNames.add(dataNames);
}
}

results.count = FilteredArrayNames.size();
results.values = FilteredArrayNames;
Log.e("VALUES", results.values.toString());

return results;
}
};

return filter;
}
}

performFiltering() 中,您需要将搜索查询与数据库中的值进行实际比较。它将结果传递给 publishResults() 方法。

关于android - ListView 过滤器 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14663725/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com