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.

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; } } 

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 .

  • Android UiAutomatorViewer no puede detectar algunas vistas
  • Añadir 2 listview en el cajón de navegación, sólo uno funciona
  • Android: OnClick para el encabezado del cajón de navegación no funciona
  • Alternar el cajón de navegación 'abrir' en el botón / clic de imagen
  • ¿Cómo eliminar fragmento el fragmento reemplazado en la transición de fragmentos?
  • No se puede bloquear el evento de clic de botón de inicio de la barra de herramientas
  • Cómo agregar barra de acción personalizada con el cajón de navegación?
  • Cómo crear un cajón de navegación personalizado en android
  • ¿Cómo utilizo DrawerLayout para mostrar sobre la Barra de Acción / Barra de herramientas y debajo de la barra de estado?
  • Cómo cambiar la lista de color del elemento seleccionado en el cajón de navidgation?
  • SeekBar en un NavigationDrawer
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.