Android Action de la Barre de Recherche: Comment faire pour filtrer la liste par la propriété d'un élément de la liste?
J'ai une vue de liste avec un élément de la liste, qui a peu de texte et une case à cocher. À l'aide de la barre d'action de recherche, j'ai besoin de filtrer la liste par un affichage du texte de la valeur.
C'est ma liste de qui j'ai besoin de filtrer par "Priorité".
C'est la méthode que j'ai utilisé pour filtrer la liste à partir des données adoptant.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
SearchView.OnQueryTextListener textChangeListener = new SearchView.OnQueryTextListener()
{
@Override
public boolean onQueryTextChange(String newText)
{
//this is your adapter that will be filtered
dataAdapter.getFilter().filter(newText);
System.out.println("on text chnge text: "+newText);
return true;
}
@Override
public boolean onQueryTextSubmit(String query)
{
//this is your adapter that will be filtered
dataAdapter.getFilter().filter(query);
System.out.println("on query submit: "+query);
return true;
}
};
searchView.setOnQueryTextListener(textChangeListener);
return super.onCreateOptionsMenu(menu);
}
J'ai mis le dataAdopter à mon listview qui contient quelques éléments, j'.e 3 texte de vues et d'une case à cocher.
//create an ArrayAdaptar from the String Array
dataAdapter = new MyCustomAdapter(this, R.layout.task_info, taskList);
listView = (ListView) findViewById(R.id.listView1);
//Assign adapter to ListView
listView.setAdapter(dataAdapter);
Mais quand j'ai mis la carte de la manière suivante; en utilisant simplement un tableau de chaîne de valeurs, le filtrage se passe sans aucun problème
String[] dataArray = new String[] {"High","Medium", "Low", "Medium", "High", "Low","High"};
listView = (ListView) findViewById(R.id.listview);
myAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dataArray);
listView.setAdapter(myAdapter);
Est il une méthode que je peux utiliser pour filtrer la liste par la valeur d'un affichage de texte à l'intérieur d'un élément de la liste? Ou est-il une autre méthode pour mettre en œuvre les fonctionnalités souhaitées.
la logique de la recherche basée sur textview est ce que je suis réellement du mal à mettre en œuvre. Dans le code où j'ai utilisé le tableau de chaîne, le filtrage se fait en utilisant les mêmes méthodes à l'aide de l'adoptant.
OriginalL'auteur Ishara Amarasekera | 2014-07-03
Vous devez vous connecter pour publier un commentaire.
le moyen le plus efficace est de mettre en place un filtre sur votre carte. Pour cela, vous devez implémenter l'interface Filtrables (implémente Filtrables). Puis de mettre en œuvre la méthode getproperty comme ça.
Enfin, dans votre Fragment ou de l'Activité, dans la méthode onCreateOptionsMenu obtenir le EditText (de recherche) et d'ajouter ceci:
Espère que cela vous aide 🙂
OriginalL'auteur Alejandro Martínez Martínez