2011-08-01 3 views
6

Dans mon Listview, je reçois du texte et de l'image et ils sont stockés dans ArrayList.BaseAdapter Listview Filtrage Android

J'utilise BaseAdapter pour afficher la liste.

Je souhaite utiliser filter dans la liste en fonction du texte tapé en EditText, mais ne fonctionne pas.

Mon code est: adv est EditText

adv.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) { 
       // TODO Auto-generated method stub 
       viewadapter.getFilter().filter(s); 

      } 

      @Override 
      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
        int arg3) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 

Et mes BaseAdapter outils Filterable si la méthode getFilter dans ce qui est:

@Override 
     public Filter getFilter() { 
      // TODO Auto-generated method stub 
      if (mFilter == null) { 
        mFilter = new ArrayFilter(); 
       } 
       return mFilter; 
     } 

et mon ArrayFilter est:

private class ArrayFilter extends Filter { 
     @Override 
     protected FilterResults performFiltering(CharSequence prefix) { 
      FilterResults results = new FilterResults(); 

      if (mNames == null) { 
       synchronized (mLock) { 
        mNames = new ArrayList<String>(mObjects); 
       } 
      } 

      if (prefix == null || prefix.length() == 0) { 
       synchronized (mLock) { 
        ArrayList<String> list = new ArrayList<String>(mNames); 
        results.values = list; 
        results.count = list.size(); 
       } 
      } else { 
       String prefixString = prefix.toString().toLowerCase(); 

       final ArrayList<String> values = mNames; 
       final int count = values.size(); 

       final ArrayList<String> newValues = new ArrayList<String>(count); 

       for (int i = 0; i < count; i++) { 
        final String value = values.get(i); 
        final String valueText = value.toString().toLowerCase(); 

        // First match against the whole, non-splitted value 
        if (valueText.startsWith(prefixString)) { 
         newValues.add(value); 
        } else { 
         final String[] words = valueText.split(" "); 
         final int wordCount = words.length; 

         for (int k = 0; k < wordCount; k++) { 
          if (words[k].startsWith(prefixString)) { 
           newValues.add(value); 
           break; 
          } 
         } 
        } 
       } 

       results.values = newValues; 
       results.count = newValues.size(); 
      } 

      return results; 
     } 

     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      //noinspection unchecked 
      mObjects = (List<String>) results.values; 
      if (results.count > 0) { 
       viewadapter.notifyDataSetChanged(); 
      } else { 
       viewadapter.notifyDataSetInvalidated(); 
      } 

    } 
} 

dans que mNames est le ArrayList avec lequel je veux filtrer le ListView.

et également activé setTextFilterEnabled(true)., mais le filtrage ne fonctionne pas.

Est-ce que cette approche est correcte? Qu'est-ce qui ne va pas? sinon, comment faire cela?

+0

Avez-vous résoudre ce problème? Pourriez-vous nous donner un avis? –

+0

Non, je n'ai pas été résolu, c'est que j'ai gardé ouvert !! Si vous avez eu, merci de poster ici Thanx – Udaykiran

+0

comment vous avez sauvegardé du texte et de l'image dans ArrayList ??? –

Répondre

0

cette API exemple de démonstration

public class SearchViewFilterMode extends Activity implements SearchView.OnQueryTextListener { 

    private static final String TAG = "SearchViewFilterMode"; 

    private SearchView mSearchView; 
    private ListView mListView; 
    private ArrayAdapter<String> mAdapter; 

    private final String[] mStrings = Cheeses.sCheeseStrings; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 

     setContentView(R.layout.searchview_filter); 

     mSearchView = (SearchView) findViewById(R.id.search_view); 
     mListView = (ListView) findViewById(R.id.list_view); 
     mListView.setAdapter(mAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, 
       mStrings)); 
     mListView.setTextFilterEnabled(true); 
     setupSearchView(); 
    } 

    private void setupSearchView() { 
     mSearchView.setIconifiedByDefault(false); 
     mSearchView.setOnQueryTextListener(this); 
     mSearchView.setSubmitButtonEnabled(false); 
     mSearchView.setQueryHint(getString(R.string.cheese_hunt_hint)); 
    } 

    public boolean onQueryTextChange(String newText) { 
     if (TextUtils.isEmpty(newText)) { 
      mListView.clearTextFilter(); 
     } else { 
      mListView.setFilterText(newText.toString()); 
     } 
     return true; 
    } 

    public boolean onQueryTextSubmit(String query) { 
     return false; 
    } 
} 
Questions connexes