OnNavigationItemSelectedListener funktioniert nicht

  • 28 Antworten
  • Neuester Beitrag
Diskutiere OnNavigationItemSelectedListener funktioniert nicht im Android App Entwicklung im Bereich Android OS.
P

PaulHerfter

Neues Mitglied
Hallo zusammen,
Moin Zusammen ich bin Paul und zum ersten Mal hier im Forum und natürlich ist hier der Umgang miteinander noch neu für mich. Ich weiß auch gar nicht ob ich so einfach mal mit einer Frage euch überfallen kann. Aber da ich damit schon so lange kämpfe traue ich mich einfach mal.
Es geht um den leidigen OnNavigationItemSelectedListener ich habe der einfach nicht funktionieren will.
Also so sieht die implementierung aus public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
dann habe ich eine Methode die den Drawer initialisiert und da wird der Lister eigentlich getriggert. funktioniert leider nicht. Ok Ihr braucht mehr Code, aber ich wollte euch nicht gleich im ersten Post so zu schreiben, da warte ich lieber bis Ihr mir sagt welche schnippel ihr genau wollt.

In diesem Sinne vielen Dank für eure Bemühungen im Voraus.
Paul Herfter
 
Empfohlene Antwort(en)
J

jogimuc

Stammgast
Hallo mal noch zur Info
Der Listner ist eine abstrakte Methode da gibt es keine super Methode.

NavigationView.OnNavigationItemSelectedListener | Android Developers

Depregated ist sie auch.

Bei allen alten Beispielen wird immer nur ein boolean Wert zurück geben mehr nicht.
Wie ich schon sagte brauchst du das alles nicht mehr.
Du arbeitest ja mit AndroidX und nicht mehr mit Support Libs.
 
Zuletzt bearbeitet:
Alle Antworten (28)
HerrDoctorPhone

HerrDoctorPhone

Guru

Grüezi, Hallole, und Willkommen bei uns hier im Forum :)



Grüße aus Freiburg im Schwarzwald :)

VG
Doc
 
sundilsan

sundilsan

Lexikon
PaulHerfter schrieb:
Ich weiß auch gar nicht ob ich so einfach mal mit einer Frage euch überfallen kann. Aber da ich damit schon so lange kämpfe traue ich mich einfach mal.
Trau dich! Überfall uns! :) Überhaupt kein Problem. Einfach nur den richtigen Bereich auswählen, also z.B. Android App Entwicklung für deine Frage oben und einen Titel wählen, woraus man schon erkennen kann, worum es ungefähr geht bei dem Problem. Da hast du dann mehr Chancen, auf entsprechende Antworten.
 
P

PaulHerfter

Neues Mitglied
Moin,
vielen Dank fuer die freundliche Aufnahme. Dachte schon es hagelt Ärger weil ich gleich mit einer Frage in der Vorstellung Reinnblase, aber ich dachte mir mal so : mal sehen. Normalerweise bin ich ja nicht so, dass ich mich nicht an Regeln halte, aber an dem Problem sitze ich sein eine Woche und ich bin kein Anfaenger weder in Java noch in der Android Entwicklung. Deshalb macht sich ja auch mittlerweile ein wenig Verzweiflung breit.
Beitrag automatisch zusammengefügt:

@swa00 Moin,
klar Code hier ist mein Code aus der onCreate in der MainActivity
ich habe die Methode ein wenig aufgeräumt und ein paar initialisieren ausgelagert in weiteren Methoden in der MainActivity. Werde ich aber genau erklären was da passiert.
@override
protected void onCreate(Bundle savedInstanceState) {// ok hier brauche ich nix weiter zu sagen denke ich mal.:)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
initDrawerStuff(toolbar); // hier wird der Drawer verarztet. methode ist weiter unten.
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();
showAlterDialog(MainActivity.this,"Do you really want to close the app \n","\nDo you really want close these app ?");// die Methode ist ebenfalls etwas weiter unten.liegt aber auf jeden fall hier bei.
}
});
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);
}
private void initDrawerStuff (Toolbar toolbar){
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
// Log.v(TAG,"und?......................................................");// anstelle eines Breakpoints :)
navigationView.setNavigationItemSelectedListener(this);// hier geht es zum Listner
}
@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;
}
private void showAlterDialog(Context context, String AlterTitle, String Altermessage) {
new AlertDialog.Builder(context)
.setTitle(AlterTitle)
.setMessage(Altermessage)

// Specifying a listener allows you to take an action before dismissing the dialog.
// The dialog is automatically dismissed when a dialog button is clicked.
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.v(TAG, "User pressed Cancel and closed not the app ");
// Toast.makeText(MainActivity.this, "Nothing Happend. Keep Kalm", Toast.LENGTH_LONG).show();
AndroidToolbox.showToast("Nothing will be happend. keep calm please. ", MainActivity.this);// in der showToast ist nur eine Standard Toast Implemtierung die sollte eigentlich kein Thema sein kann ich aber auch posten. Sollte eigentlich ist in der SotwareEntwicklung ja eher ein AlarmSignal.
:)

}
})
.setIcon(android.R.drawable.ic_dialog_alert)
// A null listener allows the button to dismiss the dialog and take no further action.
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
AndroidToolbox.closeAndDestroyApp();
// AndroidToolbox.closeAndDestroyApp();
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
So das war es erst mal ich dank euch allen im Voraus.
Bleibt Gesund.

Viele Gruesse
Paul Herfter
 
Zuletzt bearbeitet:
J

jogimuc

Stammgast
Hallo von mir auch ein willkommen im Forum.
Schön das du den Code gepostet hast.
Nur bitte beim nechsten mal in dem dafür vorgesehenen Codeblock.
Wird dann einfach übersichtlicher und bitte behalte beim Posten des Codes die eingerückte Formatierung bei.

Zu deinen Code ich kann da leider keinen listner für den drawer finden.

Ein error log hast du leider nicht mit geschickt.

Bitte erkläre mal genau wo und bei was ein Fehler kommt.
Beitrag automatisch zusammengefügt:

Das der listner im Code sein muss bin ich mir sicher denn du hast laut deinem ersten Posting das entsprechende interface implementiert. Wäre der listner nicht würde die IDE einen Fehler geben.

public boolean onNavigationItemSelected(MenuItem menuItem)
 
Zuletzt bearbeitet:
P

PaulHerfter

Neues Mitglied
@jogimuc
moin,
ups ja ich muss da echt auf die Formatierung achten.
Aber vielen Dank das Du dich da durchgebissen hast. Also wenn ich mir meinen Code jetzt im Nachhinein so anschaue, dann habe ich wirklich keinen Listner für den Drawer eingebaut verdammt.
Lediglich das Interface ist vorhanden so wie die notwendige Methode ist vorhanden, so funktioniert es eigentlich in meinen anderen Apps. Da muss ich nicht mehr viel tun.
Einen Fehler gibt es leider auch nicht. Es wird einfach nicht in die Methode des Interface gesprungen, so das ich die Fragments nicht verwenden kann.
Alle andern Apps von mir haben mit dem Drawer Layout keine Probleme. So ich schaue mal wie ich meine Post jetzt formatiert bekomme, nachträglich. Wenn Du den in dem hässlich Zustand liest, wie heute Morgen ist es mir leider nicht gelungen. Der Hintergrund, ich kann mich nur schlecht konzentrieren, da ich eine Krebserkrankung habe, ein Glioblastom und gerade mitten in der Chemo und Bestrahlung und die schwächt gewaltig, so dass ich schnell mal den Wald vor lauter Bäume nicht sehe :) und wer sich auskennt, weis auch, das ein Glioblastom, leider nicht heilbar ist. Darum bitte ich jetzt schon mal um Entschuldigung, wenn mein Posts nicht immer so schön sind, wie Ihr es gewöhnt seit.
 
J

jogimuc

Stammgast
Alles gut kein Thema.
Code einfügen oben unter den drei Punkten.

Also ich sehe keinen listner wie er aussehen sollte ist in meinem ersten Post.
Warum es dir die IDE nicht anmeckert oder auch einen erstellt keine Ahnung. Ohne kann es nicht gehen.

Code:
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {

Es wird einfach nicht in die Methode des Interface gesprungen, so das ich die Fragments nicht verwenden kann.
Die hast du garnicht das ist der Listner der fehlt.
Welche Methode soll das deiner Meinung nach sein?

PS.
Das mit deiner Krankeit tut mir Leid. Hoffe aber das beste für dich.


umangburman/Navigation-Drawer-With-Navigation-Component
 
Zuletzt bearbeitet:
P

PaulHerfter

Neues Mitglied
@jogimuc Moin, alles gut, s Ich entwickle mit Android Studio unter Debian. Manchmal ist Android Studio da ziemlich zickig. Vielleicht liegt es dran. Nun wie auch immer.

Dachte eigentlich, dass die Geschichte eher eine MVC ist also Model View Controller, da ja Beim Example genauso verfahren wird in den ersten 3 Einträge klappt es ja einwandfrei. Dann sollte es doch auch bei einem neuen Eintrag im View so gehen. Aber leider ist dem nicht so. Verdammt. Also der Code, den ihr da seht z. B. der hier navigationView.setNavigationItemSelectedListener(this), ist genau der code, der in allen möglichen Beispiele auftaucht. Und ich habe implements NavigationView.OnNavigationItemSelectedListener den Listner eingebaut, nur leider vergessen zu posten. Sorry.
https://www.youtube.com/watch?v=bjYstsO1Pg
Auftaucht. Ich habe übrigens mein App genau so gebaut, wie hier im youtube Video erklärt funktioniert leider auch nicht.
So euch allen einen schönen Tag. bleibt zu Hause und Gesund. ein tolles Wochenende und vielen vielen Dank fuer eurer Hilfe im Voraus.
viele Gruesse
Paul Herfter
 
J

jogimuc

Stammgast
Hallo das mag vielleicht alles stimmen was du da schreibst.
Wenn du uns aber nur die Hälfte zeigst können wir nicht helfen. In dem von dir gesendeten Code fehlt noch mehr.
Ob du das auch nur vergessen hast zu posten wissen wir nicht.

Schaue dir meinen link an da wird sehe gut gezeigt wie es sein sollte.


Ohne Code ohne error log kann es keine Hilfe geben.

Sorry das ich das sagen muss.
 
Zuletzt bearbeitet:
P

PaulHerfter

Neues Mitglied
@jogimuc Moin,
so ich habe es geloest. Es ist wirklich MVC. Stellte sich nur die Frage wo ist der Controller, also ich glaube die XML ist der Controller. Verbesert mich bitte, wenn ich Quatsch erzaehle mobile_navigation.xml. Die sieht naemlich so aus.
Code:
 <fragment
        android:id="@+id/nav_home"
        android:name="com.paul.easypaperwork.ui.dashboard.DashboardFragment"
        android:label="@string/menu_home"
        tools:layout="@layout/fragment_home">

        <action
            android:id="@+id/action_HomeFragment_to_HomeSecondFragment"
            app:destination="@id/nav_home_second" />
    </fragment>
    <fragment
        android:id="@+id/nav_home_second"
        android:name="com.paul.easypaperwork.ui.dashboard.DashboardecondFragment"
        android:label="@string/home_second">
        <action
            android:id="@+id/action_HomeSecondFragment_to_HomeFragment"
            app:destination="@id/nav_home" />

        <argument
            android:name="myArg"
            app:argType="string" />
    </fragment>

    <fragment
        android:id="@+id/nav_gallery"
        android:name="com.paul.easypaperwork.ui.database.DatabaseFragment"
        android:label="@string/menu_gallery"
        tools:layout="@layout/fragment_gallery" />

    <fragment
        android:id="@+id/nav_slideshow"
        android:name="com.paul.easypaperwork.ui.shareFoldershow.ShareFolderFragment"
        android:label="@string/menu_slideshow"
        tools:layout="@layout/fragment_slideshow" />
    <fragment
        android:id="@+id/nav_share"
        android:name="com.paul.easypaperwork.ui.allmysavedpaperworksFragments.AllMyStorePaperWorksFragment"
        android:label="@string/menu_share_all_paperwork"
        tools:layout="@layout/fragment_slideshow" />
Da sind naemlich genau die Beispiel Fragments drin, die Fluppen. Aus dem Grund habe ich mein neues Fragment auch eingebunden und der code in meinem Fragment ist dann auch sehr schlank.

Code:
allMyStoredPaperWorksViewModel = ViewModelProviders.of(this).get(AllMyStoredPaperWorksViewModel.class);
        View root = inflater.inflate(R.layout.fragment_slideshow, container, false);
        final TextView textView = root.findViewById(R.id.text_slideshow);
        textViewValue =" jeahhhh it works ";
        allMyStoredPaperWorksViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s) {
                folderConter++;
                String textViewValue= "yeahhhhhhhhhhhhh it works all these Times : "+folderConter;
              // textViewValue =" you have click these Fragment : "+folderConter+" Times . Do you have no Live ?";
                if (textViewValue != null) {
                    textView.setText(textViewValue);
                }
            }
        });
        return root;
Das war es dann auch, eigentlich nur noch das Model versorgen und gut ist.
Den code ins model einbinden und Ruhe.
Code:
public class AllMyStoredPaperWorksViewModel extends ViewModel {
    private MutableLiveData<String> mText;
    public LiveData<String> getText() {
        return mText;
    }
    public AllMyStoredPaperWorksViewModel() {
        mText = new MutableLiveData<>();
        mText.setValue("This is slideshow fragment");
    }
Also wenn ich hier jetzt Quatsch erzählt habe, oder das nicht wirklich toll ist MVC, dann sagt es bitte. Ich finde dieses Design Pattern jedenfalls sehr genial. Da ist gleich klar, wo die Verarbeitung der Daten Ihren Platz haben.
So ich bin dann jetzt mal weg und versuche mal heute einen SSH Tunnel, ich nutze ein Java Framework von der ETH Zürich, zu meiner PostgreSQL DB herzustellen, vielleicht schaffe ich es heute Sogar ein paar Briefe vom Amt einzuscannen und in mein DB zu speichern. Mal sehen wo es ein Framework fuer Android gibt, mit dem ich arbeiten kann.
Euch ein tolles Wochenende.

viele Gruesse Paul Herfter
 
J

jogimuc

Stammgast
Hallo das mit dem View Model kann richtig sein. Habe ich mir jetzt nicht angesehen.
Ich dachte du hast ein Problem das die Fragmente nicht angezeigt werden. So klang es bis jetzt vorallen. Und nun kommst du mit dem Model um die Ecke.

Wo und bei was ist denn nun dein Fehler?

Wenn es wirklich noch darum geht das die Fragmente nicht aufgerufen werden durch den Navdrawer dann ist immer noch die Activity sehenswert.

Geht den wenigstens der Drawer an der Seite auf und zeigt er dir dein Menue an?

Oder hast du nun einen anderen Fehler?
 
Zuletzt bearbeitet:
P

PaulHerfter

Neues Mitglied
@jogimuc Moin nun die Fragments werden angezeigt. Also ich habe mich da leider sehr bloed ausgedrueckt weil ich in der Denke war das unbedingt
Code:
 @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.

        switch(item.getItemId()) {
            case R.id.nav_gallery:
                Log.v(MainActivity.class.getCanonicalName(),"in Gallery. ");
                Fragment homeFragment = new MainFragment();
                showFragment(homeFragment);
                break;
            default :
        }


        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
der Listner laufen muss und ich so was in der Art hinkriegen sollte. Der Drawer laeuft einwandfrei, ( lief er auch von Anfang an. Schreiben ist halt sehr eingeschraenkt, ein Video, waere besser, es ist echt nicht leicht, ohne Missverständnisse zu erzeugen, komplexe Sachverhalte zu beschreiben.
Also ich habe alles was ich brauche. Der Beitrag ist, aus meiner Sicht, gelöst. Versucht es mal bei euch. Ob das fuer euch auch funktioniert. Dann können wir an dem Thread hier einen Hacken machen.
Wie gesagt ein schönes Wochenende
Viele Gruesse Paul Herfter
PS. Hoffentlich konnte ich Zweifel ausräumen und es ist alles ein wenig Klarerer geworden.
 
Zuletzt bearbeitet:
P

PaulHerfter

Neues Mitglied
@jogimuc sorry Du hast vollkommen Recht. Ich habe nur die Hälfte an Code beigefügt. Und dann auch noch erklärenendsn Text weggelassen. Das geht gar nicht. Aber dennoch Danke das Du Dir das überhaupt angeschaut hast.
Wie Du siehst sind, meine Folge Post da besser , so hoffe ich doch. Danke für Deinen Hinweis.
Cu bis bald Paul
 
P

PaulHerfter

Neues Mitglied
Altere Schwede jetzt habe ich aber ein Problem. Verdammt. Ich wollte gerade eine neue Version meiner App aufs Handy packen. Da erhalte ich diese Fehlermeldung im Log. Was habe ich getan ? ich habe meine App auf meinem Handy deinstalliert, in der Meinung, ach die habe ich ja im Source hier, dann macht das nix. aber da lag ich wohl falsch. Verdammt. Hoffentlich lässt sich das fixen, ohne das ich wieder neu anfangen muss. Dumm gelaufen, kann ich da nur sagen.
Vielen Dank im voraus
Paul Herfter
Code:
03/29 06:22:23: Launching 'app' on Google Pixel 3a.
$ adb shell am start -n "com.paul.easypaperwork/com.paul.easypaperwork.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Error while executing: am start -n "com.paul.easypaperwork/com.paul.easypaperwork.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.paul.easypaperwork/.MainActivity }
Error type 3
Error: Activity class {com.paul.easypaperwork/com.paul.easypaperwork.MainActivity} does not exist.

Error while Launching activity
ich lege noch die Manifest bei
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.paul.easypaperwork">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Klar gibt es die MainActivity. Die App lief ja bis vor kurzem noch. Erst nach dem deinstallieren, konnte ich sie von Android Studio aus nicht mehr zum Laufen bringen. Ach ja ich wollte den normalen weg nehmen über Android Studio. Da habe ich Build -> BuildBundle(APks) And Rebuild usw. versucht was zu retten ist mir aber auch nicht gelungen.
Dumm gelaufen, kann ich da nur sagen, bestimmt gibt es eine einfache Lösung
Vielen Dank im voraus
Paul Herfter
 
P

PaulHerfter

Neues Mitglied
PaulHerfter schrieb:
Altere Schwede jetzt habe ich aber ein Problem. Verdammt. Ich wollte gerade eine neue Version meiner App aufs Handy packen. Da erhalte ich diese Fehlermeldung im Log. Was habe ich getan ? ich habe meine App auf meinem Handy deinstalliert, in der Meinung, ach die habe ich ja im Source hier, dann macht das nix. aber da lag ich wohl falsch. Verdammt. Hoffentlich lässt sich das fixen, ohne das ich wieder neu anfangen muss. Dumm gelaufen, kann ich da nur sagen.
Vielen Dank im voraus
Paul Herfter
Code:
03/29 06:22:23: Launching 'app' on Google Pixel 3a.
$ adb shell am start -n "com.paul.easypaperwork/com.paul.easypaperwork.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Error while executing: am start -n "com.paul.easypaperwork/com.paul.easypaperwork.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.paul.easypaperwork/.MainActivity }
Error type 3
Error: Activity class {com.paul.easypaperwork/com.paul.easypaperwork.MainActivity} does not exist.

Error while Launching activity
ich lege noch die Manifest bei
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.paul.easypaperwork">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Klar gibt es die MainActivity. Die App lief ja bis vor kurzem noch. Erst nach dem deinstallieren, konnte ich sie von Android Studio aus nicht mehr zum Laufen bringen. Ach ja ich wollte den normalen weg nehmen über Android Studio. Da habe ich Build -> BuildBundle(APks) And Rebuild usw. versucht was zu retten ist mir aber auch nicht gelungen.
Dumm gelaufen, kann ich da nur sagen, bestimmt gibt es eine einfache Lösung
Vielen Dank im voraus
Paul Herfter
Java:
package com.paul.youresaypaperwork;

import android.content.Context;
import android.content.DialogInterface;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
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 com.paul.youresaypaperwork.Tools.AndroidToolbox;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AlertDialog;
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  implements NavigationView.OnNavigationItemSelectedListener {
    private final String TAG = MainActivity.class.getCanonicalName();
    private AppBarConfiguration mAppBarConfiguration;
    private final String TAG_ALTERNATIVE = MainActivity.class.getCanonicalName();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.v(TAG,"user Start with version : .......................................................  "+ AndroidToolbox.getAndroidVersionNr());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        initDrawerStuff(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();
                showAlterDialog(MainActivity.this,"Do you really want to close the app \n","\nDo you really want close these app ?");
            }
        });
        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,R.id.nav_share)
                .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 onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            Log.v(TAG,"und?......................................................"+R.id.drawer_layout);
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
    @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;
    }
    private void initDrawerStuff (Toolbar toolbar){
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        // updateDrawer(true);
        //  drawer.setOnClickListener(MainActivity.this);
        toggle.syncState();
        Log.v(TAG,"und?...................................................... I am above setNavigationItemSeletedListner ");
        navigationView.setNavigationItemSelectedListener(this);
    }
    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }
    private void showAlterDialog(Context context, String AlterTitle, String Altermessage) {
        new AlertDialog.Builder(context)
                .setTitle(AlterTitle)
                .setMessage(Altermessage)

                // Specifying a listener allows you to take an action before dismissing the dialog.
                // The dialog is automatically dismissed when a dialog button is clicked.
                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Log.v(TAG, "User pressed Cancel  and closed not the app ");
                        //  Toast.makeText(MainActivity.this, "Nothing Happend. Keep Kalm", Toast.LENGTH_LONG).show();
                        AndroidToolbox.showToast("Nothing will be happend. keep calm please. ", MainActivity.this);
                    }
                })
                .setIcon(android.R.drawable.ic_dialog_alert)
                // A null listener allows the button to dismiss the dialog and take no further action.
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                        // AndroidToolbox.showToast("Nothing will be happend. keep calm please. ", MainActivity.this);
                        AndroidToolbox.closeAndDestroyApp();

                    }
                })

                .setIcon(android.R.drawable.ic_dialog_alert)
                .show();
    }
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Log.v(TAG_ALTERNATIVE,"und?......................................................ItmId : "+item.getItemId());
        return super.onOptionsItemSelected(item);
    }
}
Ok, klar kann mir keiner wirklich helfen wenn Code fehlt. Am einfachsten lege ich mal meine komplette MainActivity bei. Dann habt Ihr alles an Code, den ich auch habe.
nix fuer ungut. stehe halt manchmal ganz schoen auf dem Schlauch. Sorry Leute.
 
J

jogimuc

Stammgast
Hallo ohne mir jetzt den Code richtig angesehen zu haben wo ist den eigentlich dein Problem?

Das einzige was mir erstmal auffällt ist der unterschiedliche packageName in der MainActivity und dem Manifest.
Zweitens wird es auch nicht gehen.
Das du in dem Listner die falsche Methode der Superklasse aufrufst.

deine Methode
Code:
 @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Log.v(TAG_ALTERNATIVE,"und?......................................................ItmId : "+item.getItemId());
        return super.onOptionsItemSelected(item);
    }
ist der Standard
Code:
 @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        return false;
    }
Ein Aufruf der Methode der Superklasse geht hier nicht
Eigentlich brauchst du das Interfase gar nicht. Denn du arbeitest mit den neuen NavControler.
Schaue dir an wie Google das bei einem Standard Projekt macht.


Was ist eigentlich AndroidToobox?
 
Zuletzt bearbeitet:
P

PaulHerfter

Neues Mitglied
@jogimuc
jogimuc schrieb:
Hallo ohne mir jetzt den Code richtig angesehen zu haben wo ist den eigentlich dein Problem?
Moin, ja genau darum bin ich ja hier, weil ich mir alleine nicht mehr weiter komme.

Das einzige was mir erstmal auffällt ist der unterschiedliche packageName in der MainActivity und dem Manifest.
Zweitens wird es auch nicht gehen.
Das du in dem Listner die falsche Methode der Superklasse aufrufst.
Diesen Code Finde ich auch in meinen Apps. die funktionieren und in einigen Beispielen.


deine Methode
Code:
 @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Log.v(TAG_ALTERNATIVE,"und?......................................................ItmId : "+item.getItemId());
        return super.onOptionsItemSelected(item);
    }
ist der Standard
Code:
 @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        return false;
    }
Ein Aufruf der Methode der Superklasse geht hier nicht
Eigentlich brauchst du das Interfase gar nicht. Denn du arbeitest mit den neuen NavControler.
Schaue dir an wie Google das bei einem Standard Projekt macht.
Die gehen da nicht weiter drauf ein, wenn ich mich nicht täusche.


Was ist eigentlich AndroidToobox?
Meine kleine Sammlung nützlicher CodeSnipplets :) Mehr oder weniger stabil. Stell ich nachher hier mal rein.
 
J

jogimuc

Stammgast
Du brauchst die Methode und das interface nicht.
Mache ein Standart Projekt mit AS und du siehst das es nicht gebraucht wird.

Das mit dem interface und dem listner ist aus alten Zeiten wo du noch mit der Transaction die Fragmente getauscht hast. Und das hast du in dem listner gemacht.
Das macht dir der navcontroler. Mit der dazugehörigen XML.

Wo zu für was braucht du, oder bist der Meinung den listner zu brauchen?
Beitrag automatisch zusammengefügt:

. Diesen Code Finde ich auch in meinen Apps. die funktionieren und in einigen Beispielen.[
Ja in alten Code ohne navcontroler.
 
Zuletzt bearbeitet:
J

jogimuc

Stammgast
Hallo mal noch zur Info
Der Listner ist eine abstrakte Methode da gibt es keine super Methode.

NavigationView.OnNavigationItemSelectedListener | Android Developers

Depregated ist sie auch.

Bei allen alten Beispielen wird immer nur ein boolean Wert zurück geben mehr nicht.
Wie ich schon sagte brauchst du das alles nicht mehr.
Du arbeitest ja mit AndroidX und nicht mehr mit Support Libs.
 
Zuletzt bearbeitet:
Ähnliche Themen - OnNavigationItemSelectedListener funktioniert nicht Antworten Datum
8
2
6