2010-08-05 8 views
0

J'ai un ListView rempli de tweets Twitter. J'ai fait un cours de Tweet personnalisé pour que je puisse stocker un numéro de type spécial. Donc, j'ai la classe Tweet et ArrayAdapter personnalisé:Android ListView Filtrage sans ArrayAdapters Instantiating répétée

class Tweet { 
    private int typeNumber; // My unique type number which does not come from Twitter 
    private String message; 
    // ... other tweet data 
} 

class TweetsAdapter extends ArrayAdapter<Tweet> { 
    private ArrayList<Tweet> tweets; 

    TweetsAdapter(Context context, int textViewResourceId, ArrayList<Tweet> tweets) { 
     super(context, textViewResourceId, tweets); 
     this.tweets = tweets; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
    // Inflate my own view and set my own tweet row information 
    } 
} 

Il y a une barre de navigation qui dispose de 4 boutons représentant les 4 numéros de type spécial. Je souhaite afficher un tweet filtré ListView lorsqu'une personne clique sur l'un des boutons de type sans détruire les données dans l'ArrayAdapter. Une approche que je suis venu avec est de décomposer mon ArrayList principal de tweets en sub-ArrayLists et de définir un nouvel ArrayAdapter avec le sub-ArrayList correspondant sur le ListView chaque fois que vous cliquez sur l'un des Boutons. Cela semble inefficace pour instancier un nouvel ArrayAdapter à chaque fois. Existe-t-il un meilleur moyen d'afficher un ListView filtré tout en conservant toutes les données tweet sur l'ArrayAdapter (j'ai aussi essayé de regarder la classe de filtre et il semble détruire les données sur l'adaptateur pour "filtrer")?

Répondre

0

Il semble que votre approche de 4 ArrayLists soit parfaite - faites juste un tableau de 4 ArrayAdapters. Vous pouvez même aller un peu plus loin et faire 4 ListViews et simplement définir la visibilité à GONE ou VISIBLE en fonction de celui qui est sélectionné.