Java 按多个标准搜索/筛选ListView
我目前有一个带有ListView和EditText小部件的布局。 ListView中的对象包含出发地点和目的地。 EditText用于过滤出发地点。 我想添加另一个EditText小部件,以便能够根据出发地点和目的地过滤列表。 你知道如何添加另一个过滤类,然后根据偏离和目的过滤ListView内容吗Java 按多个标准搜索/筛选ListView,java,android,listview,search,Java,Android,Listview,Search,我目前有一个带有ListView和EditText小部件的布局。 ListView中的对象包含出发地点和目的地。 EditText用于过滤出发地点。 我想添加另一个EditText小部件,以便能够根据出发地点和目的地过滤列表。 你知道如何添加另一个过滤类,然后根据偏离和目的过滤ListView内容吗 public class PlacesActivity extends Activity{ private EditText SearchText; private RelativeLayout s
public class PlacesActivity extends Activity{
private EditText SearchText;
private RelativeLayout search;
private ImageButton btnSearchClose;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.places_layout);
SearchText = (EditText) findViewById(R.id.SearchBox);
SearchText.addTextChangedListener(filterTextWatcher);
btnSearchClose = (ImageButton)findViewById(R.id.SearchClose);
placesListView = (ListView) findViewById(R.id.PlacesListView);
}
private TextWatcher filterTextWatcher = new TextWatcher() {
public void afterTextChanged(Editable s) {
adapter.getFilter().filter(s);
}
private final class MyFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults oReturn = new FilterResults();
ArrayList<Routes> results = new ArrayList<Routes>();
orig = routes;
}
if (constraint != null) {
if (orig != null && orig.size() > 0) {
for (Routes o : orig) {
String Constr = constraint.toString();
constraint = Constr.subSequence(0, Constr.length());
String FromRoute = o.getTripFrom().toLowerCase();
if (FromRoute.startsWith((String) constraint)) {
results.add(o);
}
}
oReturn.values = results;
}
}
return oReturn;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
ArrayList<Routes> objects = new ArrayList<Routes>();
objects = (ArrayList<Routes>)results.values;
routes = objects;
notifyDataSetChanged();
}
}
公共类PlacesActivity扩展活动{
私人编辑文本搜索文本;
私人关系搜索;
私有图像按钮btnSearchClose;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.places\u布局);
SearchText=(EditText)findViewById(R.id.SearchBox);
SearchText.addTextChangedListener(filterTextWatcher);
btnSearchClose=(ImageButton)findViewById(R.id.SearchClose);
placesListView=(ListView)findViewById(R.id.placesListView);
}
私有TextWatcher filterTextWatcher=新TextWatcher(){
公共无效后文本已更改(可编辑){
adapter.getFilter().filter;
}
私有最终类MyFilter扩展了筛选器{
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults oReturn=新的FilterResults();
ArrayList结果=新建ArrayList();
orig=路线;
}
if(约束!=null){
if(orig!=null&&orig.size()>0){
适用于(路线o:orig){
字符串Constr=constraint.toString();
constraint=Constr.subSequence(0,Constr.length());
字符串FromRoute=o.getTripFrom().toLowerCase();
if(FromRoute.startsWith((字符串)约束)){
结果:添加(o);
}
}
oReturn.values=结果;
}
}
返回或返回;
}
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
ArrayList对象=新的ArrayList();
objects=(ArrayList)results.values;
路由=对象;
notifyDataSetChanged();
}
}
您需要编写自己的BaseAdapter
,它扩展了Filterable
。您可以查看游标适配器如何使用(Filterable
,但不支持更改/添加筛选器)
游标适配器