2012-01-18 4 views
4

В настоящее время у меня есть макет с виджетами ListView и EditText. Объекты в ListView содержат местоположения отправления и пункты назначения. EditText используется для фильтрации мест вылета. Я хотел бы добавить еще один виджет EditText, чтобы иметь возможность фильтровать список как по местам вылета, так и по направлениям. Любые идеи о том, как добавить еще один класс фильтра и фильтровать содержимое ListView по вылетам, а затем по судьбам?Поиск/фильтрация ListView по нескольким критериям

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(); 
    } 
} 

ответ

0

Вы должны написать у вас есть BaseAdapter, который проходит Filterable. Вы можете посмотреть, как CursorAdapter (который является Filterable, но не поддерживает изменение/добавление фильтров).

CursorAdapter http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/widget/CursorAdapter.java#CursorAdapter

Смежные вопросы