Mein Code funktioniert einwandfrei: Jedes Mal, wenn auf ein Element in der Navigationsleiste geklickt wird, wird das Element ausgewählt.
Natürlich möchte ich die App mit einem Standardfragment (Home) starten, aber in Navigation Drawer ist das Element nicht ausgewählt. Wie kann ich diesen Artikel programmgesteuert auswählen?
public class BaseApp extends AppCompatActivity {
//Defining Variables
protected String LOGTAG = "LOGDEBUG";
protected Toolbar toolbar;
protected NavigationView navigationView;
protected DrawerLayout drawerLayout;
private DateManager db = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.base_layout);
navigationView = (NavigationView) findViewById(R.id.navigation_view);
// set the home/dashboard at startup
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, new DashboardFragment());
fragmentTransaction.commit();
setNavDrawer();
}
private void setNavDrawer(){
// Initializing Toolbar and setting it as the actionbar
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Initializing NavigationView
//Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
// This method will trigger on item Click of navigation menu
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
//Checking if the item is in checked state or not, if not make it in checked state
// I THINK THAT I NEED EDIT HERE...
if (menuItem.isChecked()) menuItem.setChecked(false);
else menuItem.setChecked(true);
//Closing drawer on item click
drawerLayout.closeDrawers();
//Check to see which item was being clicked and perform appropriate action
switch (menuItem.getItemId()) {
//Replacing the main content with ContentFragment
case R.id.home:
DashboardFragment dashboardFragment = new DashboardFragment();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, dashboardFragment,"DASHBOARD_FRAGMENT");
fragmentTransaction.commit();
return true;
[...]
Ich denke, dass ich hier bearbeiten muss:
if (menuItem.isChecked()) menuItem.setChecked(false);
else menuItem.setChecked(true);
Oder onCreate
beim App-Start mit FragmentTransaction.
Danke für Ihre Unterstützung.
android
navigation-drawer
Sinusba
quelle
quelle
onNavigationItemSelected
Aktion für die ausgewählte ID aus?Antworten:
Verwenden Sie den folgenden Code:
Rufen Sie diese Methode nach dem Aufruf auf
setNavDrawer();
Die
getItem(int index)
Methode ruft dieMenuItem
dann können Sie den AnrufsetChecked(true);
an , dassMenuItem
alles, was Sie zu tun , sind von links nach ist, um herauszufinden , welchen Element - Index hat den Standard hat, und die 0 mit diesem Index ersetzen.Sie können das Element durch Aufrufen auswählen (hervorheben)
Hier ist ein Referenzlink: http://thegeekyland.blogspot.com/2015/11/navigation-drawer-how-set-selected-item.html
BEARBEITEN Funktionierte nicht unter Nexus 4, Support Library Revision 24.0.0. Ich empfehle die Verwendung
navigationView.setCheckedItem(R.id.nav_item);
beantwortet von @kingston unten.
quelle
setCheckedItem (int id)
.navigationView.post(new Runnable() { navigationView.setCheckedItem(...) })
funktioniert.Sie können auch anrufen:
Diese Methode wurde in API 23.0.0 eingeführt
Beispiel
Hinweis:
android:checkableBehavior="single"
Siehe auch dies
quelle
android:checkable="true"
sonst wird es nicht von selbst überprüft.navItemSelecteListener
da das Element ausgewählt ist, nachdem diese Methode zurückgegeben wurde.Bei mir haben beide Methoden nicht funktioniert:
navigationView.getMenu().getItem(0).setChecked(true);
navigationView.setCheckedItem(id);
Versuchen Sie dieses, es funktioniert für mich.
onNavigationItemSelected(navigationView.getMenu().findItem(R.id.nav_profile));
quelle
Beispiel ( NavigationView.OnNavigationItemSelectedListener ):
Tks
quelle
performIdentifierAction
und was in ihm passiertonNavigationItemSelected
. Für Sie mag es einfach erscheinen, aber ein neuerer Entwickler hat möglicherweise Probleme, Ihren Code zu verstehen.Es gibt immer Probleme mit Googles "oh so great" Support-Bibliotheken. Wenn Sie ein Element überprüfen möchten, ohne die Version Ihrer Support-Bibliotheken herunterzustufen, setzen Sie einfach checkable, bevor Sie den Status checked festlegen.
Dies kann auch funktionieren, wenn Sie im Menü XML-Dateien als überprüfbar festlegen
quelle
Sie können den Artikel mit dem folgenden 1-Liner markieren und auswählen:
Quelle: https://stackoverflow.com/a/31044917/383761
quelle
API 23 bietet die folgende Methode:
Aus irgendeinem Grund führte diese Funktion jedoch nicht dazu, dass der Code hinter dem Navigationselement ausgeführt wurde. Die Methode hebt das Element in der Navigationsleiste zwar hervor oder "überprüft" es, scheint jedoch
OnNavigationItemSelectedListener
beim Start nicht zu einem leeren Bildschirm zu führen, wenn Ihr Startbildschirm von der Auswahl der Navigationsleiste abhängt. Es ist möglich, den Listener manuell anzurufen, aber es scheint hacky:Der obige Code setzt voraus:
NavigationView.OnNavigationItemSelectedListener
in Ihrer Aktivität implementiertnavigationView.setNavigationItemSelectedListener(this);
quelle
Dazu müssen Sie 2 Funktionen aufrufen:
Erstens: zum Ausführen der Befehle, die Sie im
onNavigationItemSelected
Listener implementiert haben :Zweitens: Zum Ändern des Status des Navigationsschubladen-Menüelements in ausgewählt (oder aktiviert):
Ich habe beide Funktionen aufgerufen und es hat bei mir funktioniert.
quelle
Mit dem folgenden Code wird nur der Menüpunkt ausgewählt:
navigationView.setCheckedItem(id);
Fügen Sie zum Auswählen und Öffnen des Menüelements nach der obigen Zeile den folgenden Code hinzu.
onNavigationItemSelected(navigationView.getMenu().getItem(0));
quelle
Das ist meine Lösung, sehr einfach.
Hier ist meine Datei menu.xml:
Über dem Menü wird der erste Menüpunkt hervorgehoben. Die folgende Zeile bewirkt etwas (z. B. das erste Fragment anzeigen usw.). HINWEIS: Schreiben Sie nach "Konfigurieren Sie Ihren Schubladencode".
quelle
Am einfachsten ist es, es wie folgt aus XML auszuwählen:
Beachten Sie die Zeile
android:checked="true"
quelle
Erstellen Sie zunächst Farben für das ausgewählte Element. Hier https://stackoverflow.com/a/30594875/1462969 gutes Beispiel. Es hilft Ihnen, die Farbe des Symbols zu ändern. Um den Hintergrund aller ausgewählten Elemente zu ändern, fügen Sie dies in Ihre Datei values \ style.xml ein
Wobei selectable_item_background in drawable / selectable_item_background.xml deklariert werden soll
Wo Farbe in style.xml deklariert werden kann
Und danach
Wie Sie sehen, habe ich dieses mainNavigationMenu_.getMenu () verwendet. FindItem (itemId) .setChecked (true); um das ausgewählte Element einzustellen. Hier Navigationsansicht
quelle
@color/state_list
Code in Ihre Antwort aufzunehmen. Woher haben Sie aus Neugier die Namenskonvention, um am Ende des Variablennamens einen Unterstrich zu setzen? Ich habe diesen Ansatz noch nie gesehen.menuItem.getItemId()
stattitemId
Wenn Sie
BottomNavigationView
die anderen Antworten verwenden, wie z. B.navigationView.getMenu().getItem(0).setChecked(true);
undnavigationView.setCheckedItem(id);
nicht funktioniert,setSelectedItemId
funktioniert das Anrufen :quelle
Treffen Sie eine Auswahl für einzelne Elemente der Navigationsschublade
Nehmen Sie einige Änderungen in Ihrer Navigationsansicht vor
quelle
zu Ihrer Aktivität (hinter der Schublade):
und
und in Ihrem Menü:
so erstes Menü ist Höhepunkt und zeigt als Standardmenü.
quelle
Der folgende Code wird verwendet, um das erste Element auszuwählen und das ausgewählte erste Element im Menü hervorzuheben .
quelle
du kannst das,
nav_view.getMenu().findItem(R.id.menutem).setChecked(true)
quelle
Aus irgendeinem Grund ist es vorzuziehen, das MenuItem anhand der IDs zu finden.
quelle