2016-12-03 4 views
0

Wenn habe ich ein neues Projekt, das ich Navigationsleiste Aktivität app screenWie ändern Artikel Navigation Ausgewählte programmatisch

nun jedes Menüpunkt, wenn ich darauf klicken, wird ein Fragment öffnen, indem Sie einen Methodennamen Ersatz fordern.

in Fragment 1 Ich habe eine RadioGroup, wenn die geprüfte Änderung das fragmet öffnen wird, hängt vom Radio ab.

@Override 
    public void onCheckedChanged(RadioGroup radioGroup, int i) { 

     RadioButton radioButton = (RadioButton)getActivity().findViewById(i); 

      if(radioButton.getTag()==1) 
     ((MainActivity) getActivity()).replaceFragment(0); 
      else if ((radioButton.getTag()==2)) 
      ((MainActivity) getActivity()).replaceFragment(2); 
    } 

Die App funktionieren, aber die Frage ist, wie kann ich die Navigation Artikel ausgewählt und auch den Titel ändern für die Aktionsleiste ändern.

ist es möglich, auf diese Weise

((MainActivity) getActivity()).onNavigationItemSelected(menuitem); 

aber aus dem Fragment zu verwenden, wie kann ich die Elemente im Menü zugreifen> activity_main_drawer.xml und führt es durch menuitem

Antwort

0

In Ihrem Fragment Sie muss hinzugefügt werden setOptionsMenu(true)

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    // TODO Add your menu entries here 
    super.onCreateOptionsMenu(menu, inflater); 
} 
+0

Das Fragment in nav_flashcards wird ein neues Fragment öffnen, die nav_home representsl, das Problem ist, wie man das Auswahlelement von nav_flashcards nach nav_home verschiebt –

0

Frage ist nicht klar. Ganzer Punkt von navigation drawer mit fragments ist der Zugriff auf die Navigation und seine Hauptsymbolleiste über alle Fragmente mit einer einzigen Hauptaktivität (die blaue Farbe in Ihrem Bild, sollten Sie jederzeit ändern können, wenn Sie ein Fragment laden)

Aber Sie müssen die frame/Elternansicht der Fragmente die Werkzeugleiste machen Ansicht blasen (das ist, warum es in der Regel mit zwei XML s kommt, activtyMain.xml und contentMain.xml wo Inhalt zur Haupt unterhalb der Werkzeugleiste in activityMain.XML enthalten ist), so dass Sie Fragmente erstellen Sehen Sie zu diesem contentMain.xml, können Sie sehen, Symbolleiste ist zugänglich für jedes einzelne Fragment, das Sie in dieser Ansicht hinzufügen, weil es in der Haupttätigkeit, wo Fragment/s hinzufügen.

so haben Sie eine Hauptaktivität und innerhalb, dass Sie Fragment/s Rahmen haben. Es spielt keine Rolle, welches Fragment Sie laden, Sie können immer noch auf die Hauptsymbolleiste zugreifen.

Wenn Sie also in navigationDrawer überprüfen, welcher Artikel geklickt wurde, laden Sie das entsprechende Fragment? und dort auf die Hauptsymbolleiste der mainActivity zugreifen und die Änderungen vornehmen, die Sie anzeigen müssen.Das ist es!

if (id == R.id.nav_whatever) { 
// access toolBar or any view in main activity and do the changes 
// call relevant fragment 
} 

Aber Sie können nicht, dass toolbar oder mainActivity Ansichten in Ihrem Fragment Klasse zuzugreifen, die Sie versuchen, zu versuchen.

Edit:

Halten Sie eine Boolesche in einer Konstante Klasse oder etwas ähnliches, dann, wenn Sie auf Ihre Schaltfläche auf dem zweiten Fragment klicken Sie auf den Wert ändern. Lassen Sie uns jetzt sagen, Boolean true ist Dann sind Sie in der Navigationsleiste

// keep the id as it is and use the Boolean to check where you needs to go 
    if (id == R.id.nav_whatever) { 
     if(boolianName){ 
     // boolianName is true go load second fragment 
      }else{ 
      // load firstfragment 
      } 

     } 
+0

Was ich meine, ist in nav_flashcards Fragment Es gibt ein Optionsfeld, wenn ich darauf klicke öffnet es ein neues Fragment und ersetzt das aktuelle durch neues und das wird das nave_home durch das code ((MainActivity) getActivity()) onNavigationItemSelected , aber wenn ich das Menü die Artikelauswahl immer noch in den nav_flashcards öffne, brauche ich eine Möglichkeit, die Artikelauswahl über nav_flashcards zu nav_home –

+0

zu ändern. Sie meinen, Sie haben einen Namen in Ihrem Navigationsschubladen, der den Namen des ersten Fragments hat. und Sie möchten es ändern, wenn Sie das zweite Fragment laden? –

+0

Der Menüeintrag (R.id.nav_home) Wenn Sie auf dieses Menü klicken, öffnen Sie Fragment 0, Menüelement-ID (R.id.nav_flahcard), wenn Sie auf diesen Menüeintrag klicken. Öffnen Sie Fragment 1, jetzt befindet sich in Fragment 1 ein Optionsfeld, wenn ich darauf klicke Radio wird Fragment 0 öffnen, aber wenn wir den Menüpunkt auf (R.id.nav_flahcard) öffnen, muss ich auch die Menüauswahl auf (R.id.nav_home) ändern, wenn ich das Fragment 0 über den Radiobutton öffne –

1

Dies funktioniert für mich erneut auf ..

NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.nav_view); 
     navigationView.getMenu().getItem(2).setChecked(true); 
+0

Es hat funktioniert. Groß! – Saveen

Verwandte Themen