Mój kod działa idealnie: za każdym razem, gdy kliknięty zostanie element w Szufladzie nawigacji, zostaje on wybrany.
Oczywiście chcę uruchomić aplikację z domyślnym fragmentem (domowym), ale w Szufladzie nawigacji nie ma zaznaczonego elementu. Jak mogę wybrać ten element programowo?
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;
[...]
Myślę, że muszę edytować tutaj:
if (menuItem.isChecked()) menuItem.setChecked(false);
else menuItem.setChecked(true);
Lub onCreate
podczas uruchamiania aplikacji za pomocą FragmentTransaction.
Dziękuję za Twoje wsparcie.
android
navigation-drawer
sineverba
źródło
źródło
onNavigationItemSelected
akcję dla wybranego identyfikatora?Odpowiedzi:
Użyj poniższego kodu:
Zadzwoń po tej metodzie
setNavDrawer();
getItem(int index)
Metoda dostajeMenuItem
wtedy można wywołaćsetChecked(true);
na tymMenuItem
, wszystko co pozostało do zrobienia jest, aby dowiedzieć się, które indeks elementu robi domyślnych i wymień 0 z tego indeksu.Możesz wybrać (podświetlić) element, dzwoniąc
Oto link referencyjny: http://thegeekyland.blogspot.com/2015/11/navigation-drawer-how-set-selected-item.html
EDYCJA Nie działała na Nexusie 4, obsługa wersji biblioteki 24.0.0. Polecam użyć
navigationView.setCheckedItem(R.id.nav_item);
odpowiedział @kingston poniżej.
źródło
setCheckedItem (int id)
.navigationView.post(new Runnable() { navigationView.setCheckedItem(...) })
- działało.Możesz także zadzwonić:
Ta metoda została wprowadzona w API 23.0.0
Przykład
Uwaga:
android:checkableBehavior="single"
Zobacz także to
źródło
android:checkable="true"
inaczej, że nie będzie sprawdzany samodzielnie.navItemSelecteListener
ponieważ element jest wybierany po powrocie tej metody.Dla mnie obie te metody nie działały:
navigationView.getMenu().getItem(0).setChecked(true);
navigationView.setCheckedItem(id);
Wypróbuj ten, działa dla mnie.
onNavigationItemSelected(navigationView.getMenu().findItem(R.id.nav_profile));
źródło
Przykład ( NavigationView.OnNavigationItemSelectedListener ):
Tks
źródło
performIdentifierAction
i co się dziejeonNavigationItemSelected
. Może ci się to wydawać proste, ale nowszy programista może mieć problemy ze zrozumieniem twojego kodu.Zawsze występują problemy z bibliotekami wsparcia „och, tak świetnie” obsługującymi biblioteki lib. Jeśli chcesz sprawdzić element bez obniżenia wersji libs wsparcia, po prostu ustaw checkable przed ustawieniem stanu sprawdzonego.
Może to również działać, jeśli ustawisz sprawdzalne w plikach xml menu
źródło
Możesz zarówno podświetlić, jak i wybrać element za pomocą następującej 1-linijki:
Źródło: https://stackoverflow.com/a/31044917/383761
źródło
API 23 zapewnia następującą metodę:
Jednak z jakiegoś powodu ta funkcja nie spowodowała uruchomienia kodu za elementem nawigacyjnym. Metoda z pewnością wyróżnia element w szufladzie nawigacji lub „sprawdza” go, ale wydaje się, że nie wywołuje
OnNavigationItemSelectedListener
pustego ekranu podczas uruchamiania, jeśli ekran startowy zależy od wybranych szuflad nawigacji. Możliwe jest ręczne wywołanie nasłuchiwania, ale wydaje się to hacking:Powyższy kod zakłada:
NavigationView.OnNavigationItemSelectedListener
w swojej działalnościnavigationView.setNavigationItemSelectedListener(this);
źródło
W tym celu musisz wywołać 2 funkcje:
Po pierwsze: w celu wyceny poleceń zaimplementowanych w
onNavigationItemSelected
nasłuchiwaniu:Po drugie: aby zmienić stan pozycji menu szuflady nawigacji na wybraną (lub zaznaczoną):
Wywołałem obie funkcje i zadziałało to dla mnie.
źródło
Poniższy kod spowoduje wybranie tylko pozycji menu:
navigationView.setCheckedItem(id);
Aby wybrać i otworzyć element menu, dodaj następujący kod po powyższym wierszu.
onNavigationItemSelected(navigationView.getMenu().getItem(0));
źródło
To jest moje rozwiązanie, bardzo proste.
Oto mój plik menu.xml:
Powyższe menu podświetli pierwszą pozycję menu. Linia poniżej coś zrobi (np .: pokaż pierwszy fragment itp.). UWAGA: napisz po „skonfiguruj kod szuflady”
źródło
Najprostszym sposobem jest wybranie go z xml w następujący sposób,
Zwróć uwagę na linię
android:checked="true"
źródło
Najpierw utwórz kolory dla wybranego elementu. Tutaj https://stackoverflow.com/a/30594875/1462969 dobry przykład. Pomaga zmienić kolor ikony. Aby zmienić tło wszystkich wybranych elementów, dodaj w pliku wartości \ style.xml to
Gdzie selectable_item_background należy zadeklarować w drawable / selectable_item_background.xml
Gdzie kolor można zadeklarować w style.xml
A potem
Jak widzisz użyłem tego mainNavigationMenu_.getMenu (). FindItem (itemId) .setChecked (true); ustawić wybrany element. Tutaj nawigacja Zobacz
źródło
@color/state_list
kodu do odpowiedzi. Z ciekawości, skąd wzięła się konwencja nazewnictwa, która umieszcza znak podkreślenia na końcu nazwy zmiennej? Nigdy nie widziałem takiego podejścia.menuItem.getItemId()
zamiast tegoitemId
Podczas korzystania
BottomNavigationView
z innych odpowiedzi, takich jaknavigationView.getMenu().getItem(0).setChecked(true);
inavigationView.setCheckedItem(id);
nie działa, zadzwońsetSelectedItemId
działa:źródło
Zrób selektor dla Individaual elementu w Nav Drawer
Wprowadź kilka zmian w NavigationView
źródło
na temat twojej aktywności (za szufladą):
i
i w twoim menu:
więc pierwsze menu jest podświetlone i wyświetlane jako menu domyślne.
źródło
Poniższy kod służy do wybrania pierwszego elementu i podświetlenia wybranego pierwszego elementu w menu.
źródło
możesz to zrobić,
nav_view.getMenu().findItem(R.id.menutem).setChecked(true)
źródło
Z jakiegoś powodu lepiej jest znaleźć element menu za pomocą identyfikatora.
źródło