youtubers tesis sobre sirve resumida que para investigaciones investigacion historia caracteristicas android navigation-drawer android-navigation-drawer

android - tesis - Cajón de navegación: ¿cómo configuro el elemento seleccionado al inicio?



tesis sobre youtube pdf (17)

Mi código funciona perfectamente: cada vez que se hace clic en un elemento en el cajón de navegación, se selecciona el elemento.

Por supuesto, quiero iniciar la aplicación con un fragmento predeterminado (inicio), pero Navigation Drawer no tiene el elemento seleccionado. ¿Cómo puedo seleccionar ese elemento mediante programación?

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; [...]

Creo que necesito editar aquí:

if (menuItem.isChecked()) menuItem.setChecked(false); else menuItem.setChecked(true);

O en onCreate al iniciar la aplicación con FragmentTransaction.

Gracias por tu apoyo.


También puedes llamar a:

navigationView.setCheckedItem(id);

Este método fue introducido en API 23.0.0

Ejemplo

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:ignore="UnusedIds"> <group android:id="@+id/group" android:checkableBehavior="single"> <item android:id="@+id/menu_nav_home" android:icon="@drawable/ic_home_black_24dp" android:title="@string/menu_nav_home" /> </group> </menu>

Nota: android:checkableBehavior="single"

Ver también this


API 23 proporciona el siguiente método:

navigationView.setCheckedItem(R.id.nav_item_id);

Sin embargo, por alguna razón, esta función no provocó la ejecución del código detrás del elemento de navegación. El método ciertamente resalta el elemento en el cajón de navegación, o lo ''revisa'', pero no parece llamar al OnNavigationItemSelectedListener lo que OnNavigationItemSelectedListener resultado una pantalla en blanco al inicio si su pantalla de inicio depende de las selecciones del cajón de navegación. Es posible llamar manualmente al oyente, pero parece hacky:

if (savedInstanceState == null) this.onNavigationItemSelected(navigationView.getMenu().getItem(0));

El código anterior supone:

  1. Has implementado NavigationView.OnNavigationItemSelectedListener en tu actividad
  2. Ya has llamado:
    navigationView.setNavigationItemSelectedListener(this);
  3. El elemento que desea seleccionar se encuentra en la posición 0

Al usar BottomNavigationView las otras respuestas, como navigationView.getMenu().getItem(0).setChecked(true); y navigationView.setCheckedItem(id); no funcionará llamando a setSelectedItemId funciona:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/darkBlue" android:state_pressed="true"/> <item android:drawable="@color/darkBlue" android:state_checked="true"/> <item android:drawable="@color/textBlue" /> </selector>


Ejemplo ( NavigationView.OnNavigationItemSelectedListener ):

private void setFirstItemNavigationView() { navigationView.setCheckedItem(R.id.custom_id); navigationView.getMenu().performIdentifierAction(R.id.custom_id, 0); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setFirstItemNavigationView(); } @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { FragmentManager fragmentManager = getFragmentManager(); switch (item.getItemId()) { case R.id.custom_id: Fragment frag = new CustomFragment(); // update the main content by replacing fragments fragmentManager.beginTransaction() .replace(R.id.viewholder_container, frag) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .addToBackStack(null) .commit(); break; }

Tks


El siguiente código se utiliza para seleccionar el primer elemento y resaltar el primer elemento seleccionado en el menú.

drawer.getMenu().findItem(R.id.action_something).setChecked(true);


El siguiente código solo seleccionará el elemento del menú:

navigationView.setCheckedItem(id);

Para seleccionar y abrir el elemento del menú, agregue el siguiente código después de la línea anterior.

onNavigationItemSelected(navigationView.getMenu().getItem(0));


En primer lugar, crea colores para el elemento seleccionado. Aquí https://.com/a/30594875/1462969 buen ejemplo. Le ayuda a cambiar el color del icono. Para cambiar el fondo de todos los elementos seleccionados, agregue en su archivo de valores / style.xml esto

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/accent_translucent" android:state_pressed="true" /> <item android:drawable="@android:color/transparent" /> </selector>

Donde selectable_item_background debe declararse en drawable / selectable_item_background.xml

<color name="accent_translucent">#80FFEB3B</color>

Donde el color se puede declarar en style.xml

// The main navigation menu with user-specific actions mainNavigationMenu_ = (NavigationView) findViewById(R.id.main_drawer); mainNavigationMenu_.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { mainNavigationMenu_.getMenu().findItem(itemId).setChecked(true); return true; } });

Y despues de esto

<android.support.design.widget.NavigationView android:id="@+id/main_drawer" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/header_main_navigation_menu" app:itemIconTint="@color/state_list" app:itemTextColor="@color/primary" app:menu="@menu/main_menu_drawer"/>

Como puede ver, usé este mainNavigationMenu_.getMenu (). FindItem (itemId) .setChecked (true); para configurar el elemento seleccionado. Aquí navegaciónVer

<menu> <group android:checkableBehavior="single"> <item android:checked="true" android:id="@+id/nav_home" android:icon="@drawable/nav_home" android:title="@string/main_screen_title_home" />


Esta es mi solución, muy simple.

Aquí está mi archivo menu.xml:

<group android:id="@+id/grp1" android:checkableBehavior="single"> <item android:id="@+id/nav_all_deals" android:checked="true" android:icon="@drawable/ic_all_deals" android:title="@string/all_deals" /> <item android:id="@+id/nav_news_and_events" android:icon="@drawable/ic_news" android:title="@string/news_and_events" /> <item android:id="@+id/nav_histories" android:icon="@drawable/ic_histories" android:title="@string/histories" /> </group>

El menú anterior resaltará el primer elemento del menú. La siguiente línea hará algo (por ejemplo: mostrar el primer fragmento, etc.). NOTA: escriba después de ''configurar su código de cajón''

onNavigationItemSelected(mNavigationView.getMenu().getItem(0));


Haga un selector para el elemento individual del cajón de navegación

<android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:itemBackground="@drawable/drawer_item" android:background="@color/textBlue" app:itemIconTint="@color/white" app:itemTextColor="@color/white" app:menu="@menu/activity_main_drawer" />

Haga algunos cambios en su NavigationView

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.addDrawerListener(toggle); toggle.syncState(); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); navigationView.setCheckedItem(R.id.nav_portfolio); onNavigationItemSelected(navigationView.getMenu().getItem(0)); }


La forma más fácil es seleccionarlo de xml de la siguiente manera,

<item name="selectableItemBackground">@drawable/selectable_item_background</item>

Tenga en cuenta la línea de android:checked="true"


Por alguna razón, es preferible encontrar el MenuItem utilizando los ID.

drawer.getMenu().findItem(R.id.action_something).setChecked(true);


Puede resaltar y seleccionar el elemento con el siguiente 1-liner:

navigationView.getMenu().performIdentifierAction(R.id.posts, 0);

Fuente: https://.com/a/31044917/383761


Siempre hay problemas con las bibliotecas de soporte de Google "oh, qué bien". Si desea verificar un elemento sin degradar su versión de libs de soporte, simplemente configure checkable antes de configurar el estado verificado.

MenuItem item = drawer.getMenu().findItem(R.id.action_something); item.setCheckable(true); item.setChecked(true);

También podría funcionar si establece checkable en el menú xml files


Tienes que llamar a 2 funciones para esto:

Primero: para excitar los comandos que ha implementado en el oyente onNavigationItemSelected :

onNavigationItemSelected(navigationView.getMenu().getItem(R.id.nav_camera));

Segundo: para cambiar el estado del elemento del menú del cajón de navegación a seleccionado (o marcado):

navigationView.setCheckedItem(R.id.nav_camera);

Llamé a ambas funciones y funcionó para mí.


Usa el siguiente código:

navigationView.getMenu().getItem(0).setChecked(true);

Llame a este método después de llamar a setNavDrawer();

El getItem(int index) obtiene el MenuItem luego puede llamar a setChecked(true); en ese MenuItem , todo lo que tiene que hacer es averiguar qué índice de elemento tiene el valor predeterminado y reemplazar el 0 con ese índice.

Puede seleccionar (resaltar) el elemento llamando

onNavigationItemSelected(navigationView.getMenu().getItem(0));

Aquí hay un enlace de referencia: http://thegeekyland.blogspot.com/2015/11/navigation-drawer-how-set-selected-item.html

EDITAR No funcionó en nexus 4, admite la revisión de la biblioteca 24.0.0. Recomiendo usar

navigationView.setCheckedItem(R.id.nav_item);

respondido por @kingston a continuación.


en su actividad (detrás del cajón):

@Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); Fragment fragment = null; if (id == R.id.nav_test1) { fragment = new Test1Fragment(); displaySelectedFragment(fragment); } else if (id == R.id.nav_test2) { fragment = new Test2Fragment(); displaySelectedFragment(fragment); } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; }

y

<group android:checkableBehavior="single"> <item android:id="@+id/nav_test1" android:title="@string/test1" /> <item android:id="@+id/nav_test2" android:title="@string/test2" /> </group>

y en tu menú:

BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation_view); bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { // TODO: 10-Aug-19 your code here } }); bottomNavigationView.setSelectedItemId(R.id.myitem);

así que el primer menú está resaltado y se muestra como menú predeterminado.


Para mí, estos dos métodos no funcionaron:

  • navigationView.getMenu().getItem(0).setChecked(true);
  • navigationView.setCheckedItem(id);

Prueba este, me funciona.

onNavigationItemSelected(navigationView.getMenu().findItem(R.id.nav_profile));