(Mit Android Studio 2021.1.1)
Erstellen eines neuen Projekts mit der Aktivität „Navigation Drawer“:
- Erstellt eine standardmäßige Android-Anwendung mit der Aktivitätsvorlage „Navigation Drawer“.
- Dem Projekt wurde ein Einstellungsfragment hinzugefügt, um das zu testen
action_settings
Menü- und Konfigurationsmenüpunkte. - Überschrieben
onOptionsItemSelected()
inMainActivity.java
So handhaben Sie das Einstellungsmenü:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Bundle bundle = new Bundle();
switch (item.getItemId()) {
case R.id.action_settings:
Navigation
.findNavController(this, R.id.nav_host_fragment_content_main)
.navigate(R.id.nav_settings);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
Testen:
Führen Sie das Projekt aus, das Schubladenmenü funktioniert einwandfrei und öffnet Fragmente wie erwartet. Das Problem ist, dass wenn Sie auf das Überlaufmenü klicken, um das Einstellungsfragment zu öffnen, es funktioniert, aber das Schubladenmenü nicht mehr funktioniert, wenn Sie das Home-Fragment öffnen.
Überwachung:
Nach einigen Tests stellte ich fest, dass es an der Abhängigkeitsversion liegt, ein Downgrade auf 2.3.5 von 2.4.1 behebt das Problem.
Stimmt etwas mit meinem Code nicht oder liegt es an einer API-Änderung? Wie gehe ich damit um, ohne downgraden zu müssen?
Zusatzinformation:
In MainActivity
‘s onCreate()
Methode habe ich folgendes hinzugefügt:
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow, R.id.nav_settings)
.setOpenableLayout(drawer)
.build();
app
Moduls build.gradle
:
plugins {
id 'com.android.application'
}
android {
compileSdk 31
defaultConfig {
applicationId "com.example.myapplication"
minSdk 23
targetSdk 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures {
viewBinding true
}
buildToolsVersion '32.0.0'
ndkVersion '23.1.7779620'
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1'
implementation 'androidx.navigation:navigation-fragment:2.4.1'
implementation 'androidx.navigation:navigation-ui:2.4.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
}