ExpandableListView y el NavigationDrawer
Estoy teniendo una edición bastante extraña. Mi lógica es simple, mi aplicación utiliza un NavigationDrawer
para la NavigationDrawer
de la aplicación principal, y debido a la complejidad de las opciones disponibles, quiero usar un ExpandableListViev
para anidar algunos elementos de navegación.
¿La cuestión? Simple también: La lista de elementos se carga en el cajón; Sin embargo, no se expanden para mostrar a los niños.
- Agregar fragmento a la actividad de NavigationDrawer
- Hacer clic en icono de hamburguesa en la barra de herramientas no abre Cajón de navegación
- Cómo agregar un elemento de menú plegable dentro del cajón de navegación en android?
- ¿Cómo utilizar el diseño de material de acción barra de navegación de cajón animación de conmutación?
- Actualizar Navegación cajón listview
La pregunta ¿Hay alguna razón por la que no se expandiría? ¿Debo usar un widget de interfaz de usuario diferente para esto?
Algunas notas : He añadido el mismo código en una actividad diferente, pero en lugar de alojar el ExpandableListViev
en el cajón, lo he añadido en un simple LinearLayout
como el único elemento, y funciona bien allí.
Mi diseño para la actividad:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <ExpandableListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="@color/secondary_color_holo"/> </android.support.v4.widget.DrawerLayout>
El código de actividad:
private DrawerLayout mDrawerLayout; private ExpandableListView mDrawerList; private ExpandableDrawerAdapter mDrawerAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ExpandableListView) findViewById(R.id.left_drawer); // set up the drawer's list view with items and click listener mDrawerAdapter = new ExpandableDrawerAdapter(this); mDrawerList.setAdapter(mDrawerAdapter); mDrawerList.setOnGroupClickListener(new DrawerGroupClickListener()); mDrawerList.setOnChildClickListener(new DrawerChildClickListener()); }
Y finalmente un adaptador muy simple:
public class ExpandableDrawerAdapter extends BaseExpandableListAdapter { private static final int CAMPAIGNS = 0; private static final int CONVERSIONS = 1; private static final int MYACCOUNT = 2; private LayoutInflater mInflater; private String[] mainNavItems, campaignNavItems, myAccountNavItems; public ExpandableDrawerAdapter (Activity context) { this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.mainNavItems = context.getResources().getStringArray(R.array.main_nav_items); this.campaignNavItems = context.getResources().getStringArray(R.array.campaigns_nav_items); this.myAccountNavItems = context.getResources().getStringArray(R.array.my_account_nav_items); } public Object getChild(int groupPosition, int childPosition) { switch (groupPosition) { case CAMPAIGNS: return campaignNavItems[childPosition]; case MYACCOUNT: return myAccountNavItems[childPosition]; default: return ""; } } public long getChildId(int groupPosition, int childPosition) { return childPosition; } public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.drawer_child_list_item, null); } TextView childText = (TextView) convertView.findViewById(R.id.drawer_child_list_item_text); childText.setText((String) getChild(groupPosition, childPosition)); return convertView; } public int getChildrenCount(int groupPosition) { switch (groupPosition) { case CAMPAIGNS: Constants.logMessage("Children for group position: " + groupPosition + " are: " + campaignNavItems.length); return campaignNavItems.length; case CONVERSIONS: Constants.logMessage("Children for group position: " + groupPosition + " are: " + 0); return 0; case MYACCOUNT: Constants.logMessage("Children for group position: " + groupPosition + " are: " + myAccountNavItems.length); return myAccountNavItems.length; default: return 0; } } public Object getGroup(int groupPosition) { return mainNavItems[groupPosition]; } public int getGroupCount() { return mainNavItems.length; } public long getGroupId(int groupPosition) { return groupPosition; } public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.drawer_list_item, null); } TextView groupText = (TextView) convertView.findViewById(R.id.drawer_list_item_text); groupText.setText((String) getGroup(groupPosition)); return convertView; } public boolean hasStableIds() { return true; } public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }
- ¿En qué componentes de interfaz de usuario deben utilizarse los filtros y / o la clasificación?
- ¿Cómo agregar el indicador de "menú" junto al icono de la aplicación de Barra de Acción?
- El cajón de navegación en android no está en pantalla completa
- Icono del cajón de navegación que no muestra android
- Gestor de navegación Android mejores prácticas
- Android: Capaz de hacer clic a través del cajón de nav? AppCompat v7: r21
- ¿Cómo mostrar el cajón de navegación en todas las actividades?
- Icono del menú izquierdo en la barra de acciones de Android
Como he dicho en mi comentario, asegúrese de que devuelve false
de la DrawerGroupClickListener
que estableció en la ExpandableListView
. Si devuelve true
de la devolución de llamada onGroupClick()
del oyente, esto bloqueará la acción de contracción / expansión a medida que el evento se considere manejado .
- NullPointerException en TextView.checkForRelayout () mientras setText ()
- Android NDK UnsatisfiedLinkError – una razón sorprendente