Navigationsleiste: Wie stelle ich das ausgewählte Element beim Start ein?

Lesezeit: 6 Minuten

Navigationsleiste Wie stelle ich das ausgewahlte Element beim Start ein
sineverba

Mein Code funktioniert perfekt: Jedes Mal, wenn auf ein Element in der Navigationsleiste geklickt wird, wird das Element ausgewählt.

Natürlich möchte ich die App mit einem Standardfragment (Home) starten, aber in der Navigationsleiste ist das Element nicht ausgewählt. Wie kann ich dieses Element programmgesteuert auswählen?

public class BaseApp extends AppCompatActivity {

    //Defining Variables
    protected String LOGTAG = "LOGDEBUG";
    protected Toolbar toolbar;
    protected NavigationView navigationView;
    protected DrawerLayout drawerLayout;

    private DateManager db = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.base_layout);

        navigationView = (NavigationView) findViewById(R.id.navigation_view);


        // set the home/dashboard at startup

        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.frame, new DashboardFragment());
        fragmentTransaction.commit();

        setNavDrawer();
    }

    private void setNavDrawer(){

        // Initializing Toolbar and setting it as the actionbar
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        //Initializing NavigationView

        //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

            // This method will trigger on item Click of navigation menu
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {


                //Checking if the item is in checked state or not, if not make it in checked state

                // I THINK THAT I NEED EDIT HERE...

                if (menuItem.isChecked()) menuItem.setChecked(false);
                else menuItem.setChecked(true);

                //Closing drawer on item click
                drawerLayout.closeDrawers();


                //Check to see which item was being clicked and perform appropriate action
                switch (menuItem.getItemId()) {    

                    //Replacing the main content with ContentFragment 

                    case R.id.home:

                        DashboardFragment dashboardFragment = new DashboardFragment();
                        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                        fragmentTransaction.replace(R.id.frame, dashboardFragment,"DASHBOARD_FRAGMENT");
                        fragmentTransaction.commit();
                        return true;
[...]

Ich denke, dass ich hier editieren muss:

if (menuItem.isChecked()) menuItem.setChecked(false);
                    else menuItem.setChecked(true);

Oder hinein onCreate beim App-Start mit FragmentTransaction.

Danke für Ihre Unterstützung.

  • Löst eine der Antworten aus onNavigationItemSelected Aktion für die ausgewählte ID?

    – Prabs

    3. Februar 17 um 11:14 Uhr


  • @Prabs ja, stackoverflow.com/questions/31233279/…

    – B-Gangster

    16. Juli 18 um 0:30 Uhr

Navigationsleiste Wie stelle ich das ausgewahlte Element beim Start ein
Arlind

Verwenden Sie den folgenden Code:

navigationView.getMenu().getItem(0).setChecked(true);

Rufen Sie diese Methode nach dem Aufruf auf setNavDrawer();

Der getItem(int index) Methode bekommt die MenuItem dann kannst du die anrufen setChecked(true); auf diesem MenuItemmüssen Sie nur noch herausfinden, welchen Elementindex der Standardwert hat, und die 0 durch diesen Index ersetzen.

Sie können das Element auswählen (markieren), indem Sie anrufen

onNavigationItemSelected(navigationView.getMenu().getItem(0));

Hier ein Referenzlink: http://thegeekyland.blogspot.com/2015/11/navigation-drawer-how-set-s selected-item.html

BEARBEITEN
Funktionierte nicht auf Nexus 4, unterstützt Bibliotheksrevision 24.0.0. Ich empfehle die Verwendung

navigationView.setCheckedItem(R.id.nav_item);

unten von @kingston beantwortet.

  • Android Support Libraries v23 hinzugefügt setCheckedItem (int id).

    – Markus Rubey

    21. August 15 um 10:44 Uhr

  • @MarkusRubey selbst nach dem Setzen von setCheckedItem kann ich das ausgewählte Element nicht hervorheben. Können Sie den möglichen Grund nennen?

    – Dexto

    30. September 15 um 21:18 Uhr

  • Hat bei mir nicht funktioniert! Wenn Methode onNavigationItemSelected für andere Optionen in der Navigationsmenüleiste aufgerufen wird, behält das anfängliche Element, das als “markiert” bezeichnet wird, immer seinen Zustand bei. Wenn ich ‘navigationView.setCheckedItem(id);’ hat perfekt funktioniert! Danach muss die Methode ‘navigationView.getMenu () performIdentifierAction (R.id.nav_market, 0);’ aufgerufen werden. um die Auswahl des gewünschten Elements durchzuführen.

    – GFPF

    4. November 15 um 11:34 Uhr


  • Keine der genannten Methoden hat bei mir aus irgendeinem Grund funktioniert. Aber tun navigationView.post(new Runnable() { navigationView.setCheckedItem(...) }) – hat funktioniert.

    – dimsuz

    28. April 16 um 11:27 Uhr

  • Sie versuchen wahrscheinlich, das markierte Element aus einem anderen Thread als dem Hauptthread zu ändern 🙂

    – Arlind

    28. April 16 um 11:31 Uhr

Navigationsleiste Wie stelle ich das ausgewahlte Element beim Start ein
Kingston

Sie können auch anrufen:

navigationView.setCheckedItem(id);

Diese Methode wurde in API 23.0.0 eingeführt

Beispiel

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      tools:ignore="UnusedIds">

    <group
        android:id="@+id/group"
        android:checkableBehavior="single">
        <item
            android:id="@+id/menu_nav_home"
            android:icon="@drawable/ic_home_black_24dp"
            android:title="@string/menu_nav_home" />
    </group>
</menu>

Notiz: android:checkableBehavior="single"

Siehe auch Dies

  • Auch nach dem Setzen von setCheckedItem kann ich das ausgewählte Element nicht hervorheben. Können Sie den möglichen Grund nennen?

    – Dexto

    30. September 15 um 21:19 Uhr

  • @DeepeshDoshi Bitte stellen Sie sicher, dass Sie ein überprüfbares Verhalten haben.

    – Jared Burrows

    20. März 16 um 4:10 Uhr

  • es sollte navigationView.setCheckedItem(R.id.menu_nav_home) sein, um das Home-Menü auszuwählen

    – Jaga

    30. März 16 um 5:31 Uhr


  • für einzelne Artikel einfach hinzufügen android:checkable="true" sonst wird es nicht von selbst überprüft.

    – sud007

    12. Juni 17 um 9:52 Uhr

  • Stellen Sie außerdem sicher, dass Sie diese Methode nicht mit aufrufen navItemSelecteListener als Element ausgewählt wird, nachdem diese Methode zurückkehrt.

    – Mallaudin

    29. April 19 um 19:29 Uhr

1643914388 865 Navigationsleiste Wie stelle ich das ausgewahlte Element beim Start ein
Raja Jawahar

Bei mir haben beide Methoden nicht funktioniert:

  • navigationView.getMenu().getItem(0).setChecked(true);
  • navigationView.setCheckedItem(id);

Probieren Sie dieses aus, es funktioniert für mich.

onNavigationItemSelected(navigationView.getMenu().findItem(R.id.nav_profile));

  • Danke für diesen Tipp. Die oben genannten Methoden sind eigentlich in Ordnung, aber das Problem ist anders: Wenn Sie sie verwenden, wird onNavigationItemSelected nicht aufgerufen, nur der Menüpunkt wird überprüft. Also müssen wir beide Methoden aufrufen.

    – Benutzer1209216

    30. Oktober 15 um 20:59 Uhr


  • onNavigationItemSelected(navView.getMenu().getItem(0)); oder onNavigationItemSelected(navView.getMenu().getItem(R.id.nav_profile)); beide haben bei mir funktioniert, getitem statt finditem.

    – Rauer Dalwadi

    23. Februar 17 um 8:55 Uhr

  • Aber warum prüft diese Methode auch nicht das Item if onNavigationItemSelected kehrt zurück true?

    – Lorion

    30. November 20 um 17:01 Uhr

Beispiel (NavigationView.OnNavigationItemSelectedListener):

private void setFirstItemNavigationView() {
        navigationView.setCheckedItem(R.id.custom_id);
        navigationView.getMenu().performIdentifierAction(R.id.custom_id, 0);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setFirstItemNavigationView();
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    FragmentManager fragmentManager = getFragmentManager();

    switch (item.getItemId()) {
        case R.id.custom_id:
            Fragment frag = new CustomFragment();

            // update the main content by replacing fragments
            fragmentManager.beginTransaction()
                    .replace(R.id.viewholder_container, frag)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .addToBackStack(null)
                    .commit();
            break;
    }

Tks

Es gibt immer wieder Probleme mit Googles “oh so great” Support Libs. Wenn Sie ein Element überprüfen möchten, ohne die Version Ihrer Support-Bibliotheken herunterzustufen, setzen Sie einfach checkable, bevor Sie den Status „checked“ festlegen.

MenuItem item = drawer.getMenu().findItem(R.id.action_something);
item.setCheckable(true);
item.setChecked(true);

Es könnte auch funktionieren, wenn Sie im Menü XML-Dateien checkable einstellen

1643914388 53 Navigationsleiste Wie stelle ich das ausgewahlte Element beim Start ein
Gemeinschaft

Sie können das Element mit dem folgenden Einzeiler markieren und auswählen:

navigationView.getMenu().performIdentifierAction(R.id.posts, 0);

Quelle: https://stackoverflow.com/a/31044917/383761

1643914389 790 Navigationsleiste Wie stelle ich das ausgewahlte Element beim Start ein
John P.

API 23 bietet die folgende Methode:

navigationView.setCheckedItem(R.id.nav_item_id);

Aus irgendeinem Grund führte diese Funktion jedoch nicht dazu, dass der Code hinter dem Navigationselement ausgeführt wurde. Die Methode hebt das Element sicherlich in der Navigationsleiste hervor oder „überprüft“ es, aber es scheint nicht aufgerufen zu werden OnNavigationItemSelectedListener Dies führt zu einem leeren Bildschirm beim Start, wenn Ihr Startbildschirm von der Auswahl der Navigationsleiste abhängt. Es ist möglich, den Listener manuell anzurufen, aber es scheint hacky:

if (savedInstanceState == null) this.onNavigationItemSelected(navigationView.getMenu().getItem(0));

Der obige Code geht davon aus:

  1. Sie haben umgesetzt
    NavigationView.OnNavigationItemSelectedListener bei Ihrer Tätigkeit
  2. Sie haben bereits angerufen:
    navigationView.setNavigationItemSelectedListener(this);
  3. Das Element, das Sie auswählen möchten, befindet sich an Position 0

.

758890cookie-checkNavigationsleiste: Wie stelle ich das ausgewählte Element beim Start ein?

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

Privacy policy