2016-03-24 9 views
4
Zugriff

ich eine Navigationsleiste in meiner Anwendung, die ich dachte, von einem Kippschalter profitieren könnte, hier gezeigt:Schwierigkeit in eine SwitchCompat vom Nav Schublade

Staffpad Toggle

Mein Problem ist, dass ich nicht kann tatsächlich zugreifen, ob der Schalter umgeschaltet wurde oder nicht.

activity_main_drawer.xml

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

    <group android:checkableBehavior="single"> 
     <item android:id="@+id/piano" 
      app:actionLayout="@layout/action_view_switch" 
      android:title="Piano Mode" /> 

action_view_switch.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v7.widget.SwitchCompat 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/piano_switch" 
     /> 
</LinearLayout> 

Und hier ist der Code-Schnipsel, wo ich versuche, auf den Switch zuzugreifen, aber die onCheckedChanged Hörer aktiviert nie:

View v = getLayoutInflater().inflate(R.layout.action_view_switch, null); 
     SwitchCompat piano = (SwitchCompat) v.findViewById(R.id.piano_switch); 

     piano.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       Settings.piano = isChecked; 
       Log.d("Switch", "You a-toggled mah switch"); 
      } 
     }); 

Antwort

1

Eigentlich erstellen Sie eine neue Ansicht und Einstellung aktiviert, um den Listener zu ändern!

Es setzt den Listener nicht auf den Switch im NavDrawer, sondern auf einen neuen Switch!

Sie sollen die Schalter in NavDrawer zugreifen:

navigationView = (NavigationView) findViewById(R.id.navigation_view); //Here you should enter your navigation view id 
SwitchCompat piano = (SwitchCompat) 
navigationView.getMenu().findItem(R.id.piano_switch); // But this depends on how you made your view in XML. It may be navigationView.getMenu().getItem(0).findItem(R.id.piano_switch); 
piano.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       Settings.piano = isChecked; 
       Log.d("Switch", "You a-toggled mah switch"); 
      } 
     }); 
+2

Danke für die Antwort! Leider gibt dies null zurück, aber ich habe es herausgefunden: 'SwitchCompat piano = (SwitchCompat) navigationView.getMenu(). GetItem (0) .getActionView(). FindViewById (R.id.piano_switch);' scheint es korrekt zu laden, grob wie es aussieht. Nochmals vielen Dank! –

+1

Es hängt davon ab, wie Sie Ihre NavigationView in XML anordnen. Ich habe gerade den Weg gezeigt! Gut zu wissen, dass es geholfen hat :-) –

+0

Richtig, ich merkte nach der Veröffentlichung, dass ich nicht meine volle Konfiguration gegeben habe, aber ich bin froh, dass Sie es sowieso wussten. –