Navigation View onNavigationItemSelected

  • Antworten:17
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 40

24.09.2017, 14:23:44 via Website

Was mache ich falsch? Irgendwo muss da noch was dazu...

@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    //Was muss da hin?
    if (id == R.id.nav_twitter) {
        iv.setVisibility(View.INVISIBLE);
    }
    return false;
}

iv = Imageview
nav_twitter = navigation Item.

Danke im Vorraus, Lg Felix

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

24.09.2017, 15:05:50 via App

Hast du mal setVisibility mit dem Parameter View.GONE versucht?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 40

24.09.2017, 15:19:19 via Website

Nein aber das sollte nur ein Beispiel sein. Es sollte eigentlich die App twitter gestartet werden. Aber es geht ja nichtmal das und wenn ich den code so ändere das twitter getartet wird geht das auch nicht. Genau so wenig wie der code zum verlassen der app wenn ich auf ein item drücke. Scheint als würden mich die items ignorieren

— geändert am 24.09.2017, 15:27:59

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

24.09.2017, 16:11:16 via App

Poste mal den Code der kompletten Actitvity. ich hab den Verdacht dass wo anders was nicht stimmt...

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

24.09.2017, 18:02:27 via App

Kann auf drn ersten Blick nichts erkennen. Hast du mal schrittweise den Debugger benutzt oder Log Ausgaben probiert?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

25.09.2017, 09:04:56 via Website

Ich glaube du solltest dich da mal dringend einlesen:
http://www.giga.de/extra/android-spezials/specials/was-ist-usb-debugging-und-wie-laesst-es-sich-aktivieren/
https://developer.android.com/studio/debug/index.html

Debugger = Bugs (=Fehler) "entferner", damit kannst du Fehler leicher finden und herausfinden was der zur laufzeit tut.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 40

25.09.2017, 14:20:44 via Website

Das hab ich schon. Aber wo kann ich die Fehlermeldungen auslesen? Die App startet ja auch Problemlos: hier mal was:
https://youtu.be/H3cWBnXOeD0 Da sieht man das Problem.

— geändert am 25.09.2017, 14:25:24

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

25.09.2017, 16:43:40 via Website

Nix Problem: Mach mal ein Intent oder ähnliches in das "itemSelected" des Drawers. Dann sollte es gehen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 40

25.09.2017, 17:18:19 via Website

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if(mToggle.onOptionsItemSelected(item)){
        return  true;
    }

    return super.onOptionsItemSelected(item);
}

Was muss da jetzt wo hin? Sry aber ich bin Anfänger. Lg Felix

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

27.09.2017, 08:21:58 via Website

Ich meinte eigentlich, dass du mal in onNavigationItemSelected etwas anderes als dein setVisibility machen solltest. Ein Toast oder Intent oder sonst was. Dann bekommst du mit ob der Event getriggert wird.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 40

27.09.2017, 09:59:14 via App

Wenn ich draufdrücke sollte sich die App schließen. Aber auch das geht nicht... Es passiert nix außer das sie das Navigation View wieder in Startposition begibt

Antworten
  • Forum-Beiträge: 40

27.09.2017, 13:38:48 via Website

So:

package com.spicehits.de.spicehits;

import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

import com.google.firebase.analytics.FirebaseAnalytics;

public class MainActivity extends AppCompatActivity {

private WebView view;
private ProgressBar bar;
private FirebaseAnalytics mFirebaseAnalytics;
private DrawerLayout mDrawerlayout;
private ActionBarDrawerToggle mToggle;
private NavigationView mNavigationView;



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

    mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);

    view = (WebView) this.findViewById(R.id.webView);


    view.getSettings().setJavaScriptEnabled(true);
    view.setWebViewClient(new MyBrowser());
    view.loadUrl("https://spicehits.de/#custom_html-17");

    bar = (ProgressBar) this.findViewById(R.id.bar);





    initInstances();







}

private void initInstances() {
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    mDrawerlayout = (DrawerLayout) findViewById(R.id.drawerlayout);
    mToggle = new ActionBarDrawerToggle(this, mDrawerlayout, R.string.open, R.string.close);
    mDrawerlayout.setDrawerListener(mToggle);
    mToggle.syncState();

    mNavigationView = (NavigationView) findViewById(R.id.nv1);
    mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            int id = menuItem.getItemId();
            switch (id) {
                case R.id.nav_twitter:
                    //Do some thing here
                    finish();
                    System.exit(0);
                    // add navigation drawer item onclick method here
                    break;
                case R.id.nav_instagram:
                    //Do some thing here
                    // add navigation drawer item onclick method here
                    break;
            }
            return false;
        }
    });

}









@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawerlayout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else if (view.canGoBack()) {
        view.goBack();
    } else {
        super.onBackPressed();
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if(mToggle.onOptionsItemSelected(item)){
        return  true;
    }

    return super.onOptionsItemSelected(item);
}






private class MyBrowser extends WebViewClient {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        bar.setVisibility(View.GONE);
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        String url3 = "lautfm-spicehits.radio.de";
        String url2 = "https://spicehits.de/";
        // all links  with in ur site will be open inside the webview
        //links that start ur domain example(http://www.chatadda.com/)
        if (url != null && url.startsWith(url2)) {
            return false;
        }
        // all links that points outside the site will be open in a normal android browser
        else {
            view.getContext().startActivity(
                    new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            return true;
        }



    }

}

}

Hat sich aber leider nix geändert. Hab ich eventuell in einer xml Datei was vergessen?

— geändert am 27.09.2017, 13:41:40

Antworten
  • Forum-Beiträge: 40

27.09.2017, 16:30:57 via Website

Oder so, was ist besser?:

package com.spicehits.de.spicehits;

import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

import com.google.firebase.analytics.FirebaseAnalytics;

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

private WebView view;
private ProgressBar bar;
private FirebaseAnalytics mFirebaseAnalytics;
private ActionBarDrawerToggle mToggle;
private DrawerLayout mDrawerlayout;



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

    mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);

    view = (WebView) this.findViewById(R.id.webView);

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    view.getSettings().setJavaScriptEnabled(true);
    view.setWebViewClient(new MyBrowser());
    view.loadUrl("https://spicehits.de/#custom_html-17");

    bar = (ProgressBar) this.findViewById(R.id.bar);

    mDrawerlayout = (DrawerLayout) findViewById(R.id.drawerlayout);
    mToggle = new ActionBarDrawerToggle(this, mDrawerlayout, R.string.open, R.string.close);
    mDrawerlayout.setDrawerListener(mToggle);
    mToggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nv1);
    navigationView.setNavigationItemSelectedListener(this);













}

@Override
public boolean onNavigationItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.nav_twitter:
            finish();
            System.exit(0);
            break;
        case R.id.nav_instagram:


            break;
        //case R.id.nav_?:


        //    break;
        //case R.id.nav_?:


        //    break;
        //case R.id.nav_?:


        //    break;
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawerlayout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}










@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawerlayout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else if (view.canGoBack()) {
        view.goBack();
    } else {
        super.onBackPressed();
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if(mToggle.onOptionsItemSelected(item)){
        return  true;
    }

    return super.onOptionsItemSelected(item);
}






private class MyBrowser extends WebViewClient {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        bar.setVisibility(View.GONE);
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        String url3 = "lautfm-spicehits.radio.de";
        String url2 = "https://spicehits.de/";
        // all links  with in ur site will be open inside the webview
        //links that start ur domain example(http://www.chatadda.com/)
        if (url != null && url.startsWith(url2)) {
            return false;
        }
        // all links that points outside the site will be open in a normal android browser
        else {
            view.getContext().startActivity(
                    new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            return true;
        }



    }

}

}

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

27.09.2017, 16:57:11 via Website

Ist egal, geht beides,
und da dein Drawer sich schließt, tut es auch.
Ich vermute eher dass dein Switch/case falsch ist.

Mach mal ein Toast vor dem Swtich rein, und schau obs angezeigt wird:
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
Toast.makeText(this,"MeinTest",Toast.LENGHT_LONG).show();
switch (id) {
case R.id.nav_twitter:
finish();
System.exit(0);
break;
case R.id.nav_instagram:

        break;
    //case R.id.nav_?:


    //    break;
    //case R.id.nav_?:


    //    break;
    //case R.id.nav_?:


    //    break;
}

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawerlayout);
drawer.closeDrawer(GravityCompat.START);
return true;

}

Wenn ja dann sind deie ItemIds falsch und du musst in der menu.xml die zugeordnet ist schauen um wleche IDs es sich handelt.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 40

28.09.2017, 09:18:21 via App

habs anders hinbekommen, danke für deine hilfe. Der link mit dem Beispiel war die Lösung!!!

Antworten

Empfohlene Artikel