Navigation Drawer Activity MenuItem auf Project Template

  • 20 Antworten
  • Neuester Beitrag
Diskutiere Navigation Drawer Activity MenuItem auf Project Template im Android App Entwicklung im Bereich Android OS.
T

Tom48

Neues Mitglied
Hallo alle zusammen,

ich habe lange nicht mehr mifür Android gemacht und mir nun mit Android Studio 3.6.2 ein Projekt aus dem Template "Navigation Drawer Activity" erstellt.
Erst auch ohne etwas zu änderen!
Wenn ich die leere App nun auf einem Gerät starte auch auch im AVD, kann ich nicht auf ein Menuitem klicken.
Ich habe auch schon den OnNavigationItemSelectedListener probiert, aber der wird nicht aufgerufen.

Glaub es ist nur eine kleiner Gedanke der mit fehlt da ich lang lang nicht mehr gemachte hab.

Schon mal vielen Dank und zur heutigen Zeit auch Gesundheit !

Thomas
 
Empfohlene Antwort(en)
J

jogimuc

Stammgast
Ja bei beiden datein ist die reienfolge falsch.
ist ja noch ein coordinatorlayout und da die reienfolge wichtig.

activity_main.xml
content_main.xml

Ps. habe es in deinem Projekt geändert dann geht auch deines mei mir.
Beitrag automatisch zusammengefügt:

Na dann haben wir es ja mit vereinten Kräften gelöst.
Aber das mit den Support libs ist trotzdem nicht gut und richtig.
 
Zuletzt bearbeitet:
Alle Antworten (20)
T

Tom48

Neues Mitglied
Danke für die schnelle Antwort.

und ja den Thread hatte ich mir auch durchgelesen. Ich hab auch gesehen das es nun auch mit einem NavController, navGraph und dem Bearbeiten im Drawer geht.
Nur fehlt mit der Schritt warum im Projekt Template auf das Auswählen der Menuitem nicht reagiert wird, kein Fehler oder so in den Logs.
Und der NavController ist noch mit den "vorgegebenen" xml Dateien eingerichtet.
 
J

jogimuc

Stammgast
Dann zeige mal den Code. In dem neuen andoidx Code ist kein listner mehr und wird auch nicht gebraucht.

Deine Fragments hast du hoffentlich auch hier eingetragen.
Code:
mAppBarConfiguration = new AppBarConfiguration.Builder( R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow) .setDrawerLayout(drawer) .build();
 
Zuletzt bearbeitet:
T

Tom48

Neues Mitglied
das ist der automatisch generierte Code vom Android Studio

Code:
package de.muster.dmenutest;

import android.os.Bundle;
import android.view.View;
import android.view.Menu;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.design.widget.NavigationView;

import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;

import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

public class MainActivity extends AppCompatActivity
     {

    private AppBarConfiguration mAppBarConfiguration;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
                .setDrawerLayout(drawer)
                .build();
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }

}
Beitrag automatisch zusammengefügt:

klar ist das auch so drin.
Ich hab den erstellten Code ohne Änderungen probiert und es geht nicht.
Beitrag automatisch zusammengefügt:
 
Zuletzt bearbeitet:
T

Tom48

Neues Mitglied
Hatte gestern alles Updaten lassen.
Gut das SDK 28 ist nur "Partially installed" :(
Ich installieren mal 28 und 29. Probiere es dann noch mal.



Code:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 28


    defaultConfig {
        applicationId "de.muster.dmenutest"
        minSdkVersion 18
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.navigation:navigation-fragment:2.2.1'
    implementation 'androidx.navigation:navigation-ui:2.2.1'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
Beitrag automatisch zusammengefügt:

so SDK 28 und 29 auch drauf. Und ich hab das 29er mal als compileVersion genommen.
aber jetzt ist das NavMenu unter einen grauen "Layout" und hinter der oberen Leiste.
Auch wenn ich das komplette neu erstelle.
Ich suche mir einen anderen Weg oder einen neuen frischen PC.

Aber der Tip mit dem SDK war gut!
Hatte gedacht das es ja nur so eine Kleinigkeit ist.
 
Zuletzt bearbeitet:
J

jogimuc

Stammgast
Gut bei diesem gradle dürften solche Imports nicht sein.
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

Nur min sdk 18 finde ich etwas tief. Bin mir nicht sicher Androidx glaube erst ab 21
 
T

Tom48

Neues Mitglied
Ok mit min SDK 22 sind die Imports auch raus.
Aber es geht auch unter SDK 22 nicht auf dem Handy.
Beitrag automatisch zusammengefügt:

dann auf die schnelle halt doch wieder wie gewohnt, will für diese Idee auch gerne sdk18 ansprechen.
Vielleicht finde ich ja auch noch den Fehler dann gibt es beides ;)
 
Zuletzt bearbeitet:
J

jogimuc

Stammgast
an der 18 wird es nicht ligen.
Vielmehr wie du das Projekt erstellst du darfst keinen Haken bei "use legacey android.suppord libaries" machen.
Unbenannt.png

Code:
package com.jw.myapplication;

import android.os.Bundle;
import android.view.View;
import android.view.Menu;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.navigation.NavigationView;

import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

public class MainActivity extends AppCompatActivity {

    private AppBarConfiguration mAppBarConfiguration;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
                .setDrawerLayout(drawer)
                .build();
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }
}

Code:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.jw.myapplication"
        minSdkVersion 18
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.navigation:navigation-fragment:2.2.1'
    implementation 'androidx.navigation:navigation-ui:2.2.1'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
 
T

Tom48

Neues Mitglied
Das hatte ich erst auch nicht gemacht.
um es zu testen aber schon mal. habe aber vorher immer die Projekte komplette gelöscht.
Nur hier mal ein Screen vom Handy, das die App auch startet ;) Es bleibt immer auf Home.
Beitrag automatisch zusammengefügt:

hab das gerade noch mal gemacht vor den Screen.
und auch deinen Code und Gradle mit meinem verglichen, passen !
 

Anhänge

Zuletzt bearbeitet:
J

jogimuc

Stammgast
was meinst du immer auf Home? Der erste Eintrag ist der defult Eintrag der ist immer activ beim App Start.
 
T

Tom48

Neues Mitglied
Das weiss ich und wenn ich den Start Parameter ändere zeigt es mir auch das passende Fragment im HostFrame an.
ich kann aber nicht auf Gallery oder Slideshow klicken, es passiert nichts und wird auch kein Fragment gewechselt.
Ich denke dafür ist der NavController da.
 
J

jogimuc

Stammgast
im Anhang ein Projekt wie es bei mir erstellt wurde und das Läuft.
 

Anhänge

  • settings.zip
    517,3 KB Aufrufe: 2
T

Tom48

Neues Mitglied
ja, super deine Version läuft bei mir auf den alten Handy!!
Hier mal meine
Beitrag automatisch zusammengefügt:

Die Linux Version vom Studio bringt ja keine Probleme, oder? ;)
 

Anhänge

  • Dmenutest.zip
    540,3 KB Aufrufe: 2
Zuletzt bearbeitet:
J

jogimuc

Stammgast
achso du arbeitest unter Linux. Ich Win 10.
kann schon sein das es daran ligt.

deine Version geht bei mir nicht.

habe es aber noch nicht verglichen.
 
T

Tom48

Neues Mitglied
ich habe den Fehler gefunden!!

Code:
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

WENN ES HIER STEHT GEHT ALLES !!!

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        android:background="@color/colorGrey"
        app:itemIconTint="@color/colorBlack"
        app:itemTextColor="@color/colorBlack"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />
    
HIER STEHT ES BEI LINUX UND IST FALSCH !!
    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.drawerlayout.widget.DrawerLayout>
 
T

Tom48

Neues Mitglied
Es liegt an dem include in der activity_main.xml !
Also bei Linux aufpassen
Beitrag automatisch zusammengefügt:

Also war ich doch nicht zu .... ;)
ich bin schon seit gestern Mittag am suchen gewesen!!
 
Zuletzt bearbeitet:
J

jogimuc

Stammgast
Ja bei beiden datein ist die reienfolge falsch.
ist ja noch ein coordinatorlayout und da die reienfolge wichtig.

activity_main.xml
content_main.xml

Ps. habe es in deinem Projekt geändert dann geht auch deines mei mir.
Beitrag automatisch zusammengefügt:

Na dann haben wir es ja mit vereinten Kräften gelöst.
Aber das mit den Support libs ist trotzdem nicht gut und richtig.
 
Zuletzt bearbeitet:
T

Tom48

Neues Mitglied
Die Libs hatte ich aber so auch schon raus.
Die Dateien von mir waren ja so auch original erstellt worden durch das Template
OK dann mal danke!! Und bleibt gesund!

Thomas
 
Zuletzt bearbeitet:
J

jogimuc

Stammgast
Danke bleib ebenfals gesund.

Ps. und jetzt umstig auf Win ? oder nein?
 
Zuletzt bearbeitet:
Ähnliche Themen - Navigation Drawer Activity MenuItem auf Project Template Antworten Datum
7