Materialdrawer: Début de l'activité et avec OnDrawerItemClickListener cliqué.

Créé le 16 juin 2017  ·  14Commentaires  ·  Source: mikepenz/MaterialDrawer

Je viens d'ouvrir l'activité mais je ne clique sur aucun élément. Mais la fonction avec OnDrawerItemClickListener est-elle exécutée la première fois ?

question

Commentaire le plus utile

@trinhvanminh2009 Typiquement, le tiroir est attaché à l'activité et le contenu interne est géré par des fragments. Peut-être devriez-vous regarder cela plutôt que de lancer une nouvelle activité à chaque fois. Si vous choisissez de vous en tenir à l'activité, transmettez peut-être l'index de position à l'activité suivante, puis définissez la position du tiroir sur cette valeur lors du chargement. Recherchez des extras d'intention pour cela.

Edit : je vois maintenant qu'une grande partie du code que vous avez publié correspond à celui de l'exemple d'application. Gardez à l'esprit que le but de cette application est de présenter de nombreux styles de tiroirs, c'est pourquoi elle lance les activités. Votre application a probablement un objectif différent.

Tous les 14 commentaires

Vous pouvez régler le tiroir sur la position d'ouverture 0 au lancement, ce qui déclenche l'écouteur. Si vous avez besoin de plus d'aide, postez peut-être comment vous avez ajouté le tiroir.

 new DrawerBuilder().withActivity(this).build();
        final PrimaryDrawerItem item1 = new PrimaryDrawerItem().withIdentifier(1).withName("Create new order ");
         final PrimaryDrawerItem item2 = new PrimaryDrawerItem().withIdentifier(2).withName("Created order");
        PrimaryDrawerItem item3 = new PrimaryDrawerItem().withIdentifier(3).withName("Tutorials");
        PrimaryDrawerItem item4 = new PrimaryDrawerItem().withIdentifier(4).withName("Your profile");
        PrimaryDrawerItem item5 = new PrimaryDrawerItem().withIdentifier(5).withName("About us");
        PrimaryDrawerItem item6 = new PrimaryDrawerItem().withIdentifier(6).withName("Version");
        PrimaryDrawerItem item7 = new PrimaryDrawerItem().withIdentifier(7).withName("Settings");
        PrimaryDrawerItem item8 = new PrimaryDrawerItem().withIdentifier(8).withName("Logout");
        AccountHeader headerResult = new AccountHeaderBuilder()
                .withActivity(this)
                .withHeaderBackground(R.drawable.background_home)
                .addProfiles(
                        new ProfileDrawerItem().withName("Minh").withEmail("Trịnh Văn Minh")//.withIcon(myUri)
                )
                .withOnAccountHeaderListener(new AccountHeader.OnAccountHeaderListener() {
                    <strong i="5">@Override</strong>
                    public boolean onProfileChanged(View view, IProfile profile, boolean currentProfile) {
                        return false;
                    }
                })
                .build();
        final Drawer result = new DrawerBuilder()
                .withActivity(this)
                .withAccountHeader(headerResult)
                .withToolbar(toolbar)
                .addDrawerItems(
                        item1,
                        item2,
                        item3,
                        item4,
                        item5,
                        item6,
                        item7,
                        item8
                )
                .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
                    <strong i="6">@Override</strong>
                    public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
                        // do something with the clicked item :D // # On create not click it auto run
                        if(drawerItem.getIdentifier() ==1)
                        {
                            Intent intent = new Intent(getApplicationContext(), HandleMapsActivity.class);
                            getApplicationContext().startActivity(intent);
                        }
                        if(drawerItem.getIdentifier() ==2)
                        {
                            Intent intent = new Intent(getApplicationContext(), CreatedOrderActivity.class);
                            getApplicationContext().startActivity(intent);
                        }
                        return false;
                    }
                })
                .build();

        result.setSelection(1);
        result.setSelection(item2);
        result.setSelection(1, true);
        item1.withBadge("19").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_create_new));
        item2.withBadge("5").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_created));
        item3.withBadge("5").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_tutorials));
        item4.withBadge("19").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_your_profile));
        item5.withBadge("5").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_about));
        item6.withBadge("5").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_version));
        item7.withBadge("19").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_settings));
        item8.withBadge("5").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_logout));

        item1.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
            <strong i="7">@Override</strong>
            public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {

                Intent intent = new Intent(getApplicationContext(), HandleMapsActivity.class);
                getApplicationContext().startActivity(intent);
                return false;
            }
        });

        item2.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
            <strong i="8">@Override</strong>
            public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {

                if(drawerItem.getIdentifier() == 2)
                {
                    Intent intent = new Intent(getApplicationContext(), CreatedOrderActivity.class);
                    getApplicationContext().startActivity(intent);
                }


                return true;
            }
        });
        result.openDrawer();
        result.closeDrawer();
        result.getDrawerLayout();

Est-ce votre mise en œuvre réelle? Vous avez quelques cas où vous avez construit le tiroir et ne l'avez pas utilisé, et vous n'aurez pas besoin d'ouvrir puis de fermer le tiroir immédiatement.

En haut de votre partie de code formaté, vous pouvez voir result.setSelection(1, true); , qui définit la sélection et a true qui émettra un événement de clic

Merci. Je l'ai compris, mais comment puis-je définir la sélection pour chaque élément lorsque l'élément est cliqué ? Il ne sélectionne plus l'automatisation. ??

   final Drawer result = new DrawerBuilder()
                .withActivity(this)
                .withAccountHeader(headerResult)
                .withToolbar(toolbar)
                .addDrawerItems(
                        item1,
                        item2,
                        item3,
                        item4,
                        item5,
                        item6,
                        item7,
                        item8
                )
                .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
                    <strong i="6">@Override</strong>
                    public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
                        // do something with the clicked item :D
                        if(drawerItem.getIdentifier() ==1)
                        {

                            Intent intent = new Intent(getApplicationContext(), HandleMapsActivity.class);
                            getApplicationContext().startActivity(intent);

                            return true;
                        }
                        if(drawerItem.getIdentifier() == 2)
                        {
                            Intent intent = new Intent(getApplicationContext(), CreatedOrderActivity.class);
                            getApplicationContext().startActivity(intent);
                            return true;
                        }

                        return false;
                    }
                })
                .build();


        item1.withBadge("19").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_create_new));
        item2.withBadge("5").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_created));
        item3.withBadge("5").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_tutorials));
        item4.withBadge("19").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_your_profile));
        item5.withBadge("5").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_about));
        item6.withBadge("5").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_version));
        item7.withBadge("19").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_settings));
        item8.withBadge("5").withBadgeStyle(new BadgeStyle().withTextColor(Color.WHITE).withColorRes(R.color.md_green_900)).withIcon(getResources().getDrawable(R.drawable.ic_logout));

@trinhvanminh2009 renvoie false dans l'écouteur. true signifie que l'événement a été consommé et qu'aucune autre action n'est effectuée dans le tiroir lui-même. Ceci est mentionné dans le JavaDoc de cette méthode.

@mikepenz Merci. Je retourne true ou false a toujours un problème. Après startActivity(intent), il choisit toujours selection(item1). J'utilise cette classe est abstraite et d'autres classes s'étendent de cette classe. je ne peux pas utiliser
result.setSelection(item1) après startActivity. Comment je peux le réparer.
Merci.

Je sais que lorsque je démarreActivity(Intent), une nouvelle classe l'actualisera. C'est pourquoi il sélectionne toujours (item1). Pouvez-vous me donner une idée pour y remédier ?

@trinhvanminh2009 Typiquement, le tiroir est attaché à l'activité et le contenu interne est géré par des fragments. Peut-être devriez-vous regarder cela plutôt que de lancer une nouvelle activité à chaque fois. Si vous choisissez de vous en tenir à l'activité, transmettez peut-être l'index de position à l'activité suivante, puis définissez la position du tiroir sur cette valeur lors du chargement. Recherchez des extras d'intention pour cela.

Edit : je vois maintenant qu'une grande partie du code que vous avez publié correspond à celui de l'exemple d'application. Gardez à l'esprit que le but de cette application est de présenter de nombreux styles de tiroirs, c'est pourquoi elle lance les activités. Votre application a probablement un objectif différent.

Donc, je devrais utiliser fragment ou intention.putExtra. J'ai 2 possibilités ?

@trinhvanminh2009 Je vous suggère d'examiner les fragments. De cette façon, vous n'avez qu'un seul tiroir et vous n'avez pas à vous soucier de la sélection. Jetez un œil à la façon de changer de fragments , ce que vous ferez lorsque vous recevrez un clic sur le tiroir

Oui . J'ai utilisé fragment pour google maps et fragment de dialogue. Mais de cette façon, je n'ai jamais essayé avant. Merci beaucoup . Je vais essayer ça tout de suite.

@AllanWang merci d'avoir répondu :)

@trinhvanminh2009 de nombreuses personnes l'ont déjà atteint en utilisant des activités. C'est simplement plus compliqué car le Drawer ne peut pas correctement garder l'état à travers les différentes activités, et vous devez gérer le positionnement, ...

La plupart des gens qui ont fait cela ont créé un BaseActivity qui avait le code du tiroir et ainsi de suite.

N'oubliez pas non plus que vous pouvez select un élément du tiroir sans appeler l'écouteur. (Il suffit de voir le JavaDoc)

Et vous pouvez toujours gérer des tâches plus complexes en gérant certaines choses avec l'auditeur.

@mikepenz Merci pour votre soutien. J'utilise le tiroir dans BaseActivity. Mais cela ne fonctionne pas parfaitement comme je le pense. Peut-être que mon code a un problème. Je pense qu'utiliser Fragment est une meilleure idée. L'utilisation de BaseActivity est également bonne, mais comment modifier l'activité sans utiliser l'intention ou comment définir la sélection dans onDrawerItemClickListener ?

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

jehad-suliman picture jehad-suliman  ·  3Commentaires

jd-alexander picture jd-alexander  ·  4Commentaires

meness picture meness  ·  3Commentaires

ghost picture ghost  ·  3Commentaires

AlexMercier picture AlexMercier  ·  3Commentaires