- Searching / filtering ListView by multiple criterias
- 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();
- }
- }