Legen Sie den Index/die ID des ursprünglich ausgewählten Elements in BottomNavigationView fest

Lesezeit: 4 Minuten

Benutzeravatar von UneXp
UneXp

habe ich umgesetzt BottomNavigationView und habe keine ahnung wie man auswahl index bzw. setzt MenuItem id (in meinem Fall sollte das mittlere Element standardmäßig ausgewählt sein).

Ich fürchte, es gibt im Moment keine solche Möglichkeit, da es noch zu roh ist, aber trotzdem wird jede Hilfe geschätzt. Vielen Dank!

  • Verweisen Sie auf diesen Link. androidgifts.com/…

    – Jigar Shekh

    25. Oktober 2016 um 9:58 Uhr

  • Ja, ich weiß ungefähr Bodenleiste aber ich kann nicht glauben, dass support.design keine Möglichkeit hat, Elemente programmgesteuert auszuwählen 🙂 Vielleicht einige hackige Lösungen …

    – UneXp

    25. Oktober 2016 um 10:06 Uhr

  • Sehen Sie sich diese Antwort an. Dies ist die beste Lösung.

    – Wolodymyr Jazykiw

    13. Dezember 2016 um 14:50 Uhr

  • Eine “elegantere” Antwort wurde hinzugefügt, die Sie sich vielleicht ansehen können.

    – Jan Slominski

    14. Januar 2017 um 18:08 Uhr

Stellen Sie die ID des ausgewählten Menüpunkts mit ein setSelectedItemId:

bottomNavigationView.setSelectedItemId(R.id.item_id);

Diese Methode ist ab Android Support Library 25.3.0 verfügbar.

  • Oder verwenden Sie die Eigenschaftszugriffssyntax auf Kotlin: bottomNavigationView.selectedItemId = R.id.item_id

    – joseluisq

    23. August um 20:46 Uhr

Benutzeravatar von UneXp
UneXp

Die einzige Lösung, die für mich funktioniert hat, ist:

View view = bottomNavigationView.findViewById(R.id.menu_action_dashboard);
view.performClick();

Einfaches Klicken macht den Trick. Wir hoffen, dass wir in zukünftigen Versionen zusätzliche Methoden/Eigenschaften erhalten werden.

AKTUALISIERT:

Wie der Benutzer 5968678 erwähnte, wurde seit der Android Support Library v25.3.0 eine neue Methode hinzugefügt:

bottomNavigationView.setSelectedItemId(R.id.item_id);

also benutze das stattdessen 🙂

  • Beste Lösung bisher

    – Gemeiner Mann

    13. Dezember 2016 um 21:54 Uhr

Ich denke, diese Lösung ist etwas eleganter als die akzeptierte Antwort:

bottomNavigationView.getMenu().getItem(menuItemIndex).setChecked(true)

wobei menuItemIndex der Index des ausgewählten Elements ist.

  • Funktioniert nicht. Wenn Sie die Animation auf Ihrer unteren Navigationsleiste aktiviert haben, können Sie sehen, dass die Farbe des ausgewählten Elements geändert wurde, aber die Animation befindet sich immer noch auf dem ersten Element des Menüs. Derzeit nicht in der Android-Bibliothek verfügbar. WENN SIE ES JEDERZEIT FUNKTIONIEREN MÖCHTEN: ((BottomNavigationMenuView) bottomNavigationView.getChildAt(0)).getChildAt(menuItemIndex).performClick(); ODER NOCH BESSER: ((BottomNavigationMenuView) bottomNavigationView.getChildAt(0)).findViewById(R.id.id_menu_action).performClick();

    – Anne-Claire

    30. Januar 2017 um 16:43 Uhr


  • Kannst du deinen Code posten? Ich verwende die neueste BottomNavigationView aus der Google-Supportbibliothek (25.1.0) und wenn ich den ausgewählten Index so ändere, funktioniert die Animation ohne Probleme.

    – Jan Slominski

    31. Januar 2017 um 9:30 Uhr

  • Dadurch wird das Menü nur auf aktiv gesetzt, aber nicht das Menü selbst ausgelöst, wonach ich suche

    – Irfandi D. Vendy

    23. Juli 2019 um 16:54 Uhr

Benutzeravatar von arekolek
arekolek

Hier ist was die Dokumentation sagt dazu:

Menüpunkte können auch zum programmatischen Auswählen verwendet werden, welches Ziel gerade aktiv ist. Es kann mit durchgeführt werden MenuItem#setChecked(true)

Alternativ zu dem, was Jan gepostet hat, können Sie den Artikel auch anhand der ID finden:

Menu menu = findViewById(R.id.navigation).getMenu();
menu.findItem(R.id.navigation_home).setChecked(true);

Auch im Allgemeinen kann ich empfehlen anzurufen .callOnClick() Anstatt von .performClick().

Wenn Sie einen Listener verwenden, wie die Standardimplementierung in Android Studio, versuchen Sie Folgendes:

BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
Integer indexItem = 4;
navigation.getMenu().getItem(indexItem).setChecked(true);
mOnNavigationItemSelectedListener.onNavigationItemSelected(navigation.getMenu().getItem(indexItem));

Benutzeravatar von Mbanda
Mbanda

Ich glaube, die Frage in diesem Zusammenhang wird in verschiedenen Kontexten betrachtet, basierend auf den Antworten hier. Laut Bewertung ist die Fähigkeit erforderlich, sich auf bestimmte Dinge zu konzentrieren BottomNavigationView Gegenstand (definitiv in neuer Klasse mit verschiedenen Fragmenten).

Jetzt könnten Sie BottomNavigationView ODER Buttons oder irgendetwas anklickbares haben, um neue Aktivitäten mit Absicht zu starten: –
dh

Intent intent = new Intent(getActivity(), New_Activity.class);
    intent.putExtra("EXTRA_PAGE, 1);
    startActivityForResult(intent, 30);

Dann
-in unserer New_Activity erhalten wir die Absicht-

Absicht Absicht = getIntent(); int Seite = intention.getExtras().getInt(“EXTRA_PAGE);

Wir durchlaufen dann die Seitenvariable, um die zu finden Nummer/Index für die die aktuelle BottomNavigationView reflektiert , THEN Wir setzen unser Fokusmenüelement (vorausgesetzt, Ihr BottomNavigationView hat ein Menüelement für seine Anzeige)

     if(page == 1) {
         currentselect = new Pending();
            bottomNavigationView.getMenu().getItem(0).setChecked(true);
}

Damit ist die obige Frage beantwortet. Der Rest des Fragment-Schalters wird durch die Anzahl der obigen Posts gut gehandhabt, indem aufgerufen wird:

bottomNavigationView.setOnNavigationItemSelectedListener(navListener);

Dann sowas wie:

   private BottomNavigationView.OnNavigationItemSelectedListener navListener =
        new BottomNavigationView.OnNavigationItemSelectedListener(){
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                Fragment selectedFrag = null;
                switch (item.getItemId()) {
                    case R.id.pending:
                        selectedFrag = new Pending();
                        break;
                    case R.id.onTransmit:
                        selectedFrag = new inTransmit();
                        break;
                    case R.id.complete:
                        selectedFrag = new Complete();
                        break;
                }

                getSupportFragmentManager().beginTransaction().replace(R.id.select_field, selectedFrag).commit();

                return true;
            }
        };

HINWEIS:
Verwenden BottomNavigationView und ContentFrameLayout ist so sparsam und wird Ihren Code auf über 50 % reduzieren, im Gegensatz zu Likes von ViewPager und Tablayout

Benutzeravatar von Hamed Jaliliani
Hamed Jaliliani

Kotlin-Code für anfänglich ausgewähltes Element in bottomnavigation.BottomNavigationView :

bottom_navigation_view.selectedItemId = R.id.navigation_item_messages

1435940cookie-checkLegen Sie den Index/die ID des ursprünglich ausgewählten Elements in BottomNavigationView fest

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy