0
votes

Comment afficher les données par type d'objet dans Recycleradapter?

J'ai une liste d'éléments avec des types [A, B, C, D] indique l'état de l'élément. Lorsque je clique sur Bouton, je souhaite afficher des éléments avec des types [A, B] dans RECYCLERVIEW, puis cliquez sur ButtonB Afficher les éléments avec Types [C, D]. Mes solutions actuelles utilisent deux liste et deux adaptateurs, je me demande s'il y a une meilleure approche, merci.

 Entrez la description de l'image ici


0 commentaires

3 Réponses :


1
votes

Le travail d'un recycleradapter consiste à afficher les données que vous y passez. Malheureusement, vous ne fournissez aucun code, alors je suppose que les boutons sont en dehors de votre recyclerview.

Placez une méthode à l'intérieur de votre recycleradapater que vous pouvez appeler de l'extérieur. Le notifierdatastetchangeed () code> re-exécute onbindviewholder () code> avec vos nouvelles données fournies. P>

public void updateList(List<YourObjectType> yourObjects) {
    this.yourObjects = yourObjects;
    notifyDataSetChanged();
}


1 commentaires

Salut Algtra, tu as raison. Les boutons sont en dehors de recyclerview. J'ai utilisé votre extrait dans mon code précédent. Maintenant, j'ai mis en œuvre une interface filtrable qui résoudra simplement mon problème. J'ai posté ma nouvelle solution ci-dessous. Merci pour votre commentaire.



2
votes

C'est vraiment facile! Je suppose que dans votre modèle d'objet, vous avez un champ booléen. Vous pouvez utiliser une interface filtrable. Il suffit de la mettre en œuvre dans l'activité / le fragment ou la viewModel pour filtrer la liste que vous passez à l'adaptateur en fonction de la valeur booléenne ou de tout autre critère à l'intérieur des clics-clics respectifs des boutons de vos boutons. C'est assez simple et intuitif.

ou juste partager votre code, je peux le faire pour vous. Je veux vraiment des points))


3 commentaires

Bonjour @Rinat, mon objet n'a pas de booléen mais il y a le statut de champ [0-5] représente 6 état des transactions. 3 d'entre eux appartiennent à chaque onglet (pièce jointe d'image). Mais j'ai toujours mis en œuvre une interface filtrable comme vous le mentionnez. J'ai posté mon extrait ci-dessous, si vous avez une suggestion s'il vous plaît laissez-moi savoir.


ça à l'air bien pour moi. C'était facile n'était pas ça? Juste vous auriez pu utiliser une chaîne finale constante au lieu de "u" pour rendre le code plus compréhensible. En plus de cela, c'est bien parce que lorsque j'ai utilisé la même méthode pour une application sérieuse, mon mentor senior n'a eu aucun problème.


Je sais que je n'étais pas verbeux en répondant, mais si cela aidait, pourriez-vous accepter la réponse? Seulement si cela vous a aidé OFC.



0
votes

Je résolvez mon problème en implémentant une interface filtrable dans l'adaptateur. OnCréate d'activité, après l'adaptateur initial à RECYCLERView, j'ai ajouté ceci:

@Override
public Filter getFilter() {
    return new Filter() {

        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {

            if (charSequence.equals("u")) {
                List<Transaction> filteredList = new ArrayList<>();
                for (Transaction trans : allTrans) {
                    if (trans.getTr_stt().equalsIgnoreCase("0") ||
                            trans.getTr_stt().equalsIgnoreCase("2") ||
                            trans.getTr_stt().equalsIgnoreCase("5")) {
                        filteredList.add(trans);
                    }
                }

                filteredTrans = filteredList;
            } else {
                List<Transaction> filteredList = new ArrayList<>();
                for (Transaction trans : allTrans) {
                    if (trans.getTr_stt().equalsIgnoreCase("1") ||
                            trans.getTr_stt().equalsIgnoreCase("3") ||
                            trans.getTr_stt().equalsIgnoreCase("4")) {
                        filteredList.add(trans);
                    }
                }

                filteredTrans = filteredList;
            }


            FilterResults filterResults = new FilterResults();
            filterResults.values = filteredTrans;
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
            filteredTrans = (ArrayList<Transaction>) filterResults.values;
            notifyDataSetChanged();
        }
    };
}


0 commentaires