2011-07-10 18 views
13

En mi aplicación, los usuarios pueden seleccionar artículos para descargar utilizando diferentes criterios. Uno de ellos es año y mes. Para esto, me gustaría un AlertDialog con una lista de años. Si el usuario hace clic en un año, la lista se expandirá y mostrar enero, febrero, etc.¿Es posible crear una lista expandible AlertDialog?

sé cómo hacer una vista de lista ampliable utilizando un SimpleExpandableListAdapter pero eso no es lo que quiero. Dado que los otros criterios (por ejemplo, categoría) también son listas AlertDialogs, quiero algo similar en apariencia.

¿Es posible lograr una lista expandible AlertDialog?

SOLUCIÓN

Esto es lo que terminó con basado en la solución de CommonsWare:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setTitle("Select something"); 

ExpandableListView myList = new ExpandableListView(this); 
MyExpandableListAdapter myAdapter = new MyExpandableListAdapter(); 
myList.setAdapter(myAdapter); 

builder.setView(myList); 
AlertDialog dialog = builder.create(); 
dialog.show(); 

único problema restante: ¿Cómo se implementa el oyente onClick para el AlertDialog? Normalmente lo haría en el método setItems(), pero no estoy usando setItems.

Agregué myList.setOnItemClickListener después de myList.setAdapter() pero se ignora. No ocurre nada cuando hago clic en un artículo:

myList.setOnItemClickListener(new ListView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> a, View v, int i, long l) { 
     try { 
      Toast.makeText(ExpandableList1.this, "You clicked me", Toast.LENGTH_LONG).show(); 
     } 
     catch(Exception e) { 
      System.out.println("something wrong here "); 
     } 
    } 
}); 

Solución al problema haga clic en:

la solución era muy simple. Como se trata de una lista ampliable, los clics de elementos son capturados por la propia lista para abrir los elementos secundarios. Por lo tanto, el controlador de eventos nunca se llama.

En su lugar, debe implementar OnChildClickListener() que, como su nombre lo indica, ¡escucha los clics de los niños!

Respuesta

9

Use setView() en AlertDialog.Builder, pasando un ExpandableListView que infle o cree en el código Java y haya configurado su adaptador.

+0

Hmm, soy bastante nuevo con Android, pero lo intentaré ... – marlar

+0

He trabajado un poco en esto y tengo la idea básica, pero ¿cómo creo la vista de lista? Normalmente crearía una actividad e inflarla desde xml, pero en este caso no mostraré la vista de lista excepto en el cuadro de diálogo. Por lo tanto, de alguna manera necesito crear la vista de lista expandible dentro de mi actividad principal y pasarla usando setView. ¿Cómo puedo hacer eso? Gracias. – marlar

+0

@marlar: infle un recurso XML de diseño que contenga un 'ExpandableListView' o cree uno a través de Java (por ejemplo, new ExpandableListView (this)'). – CommonsWare

1

Bueno, para usar las vistas de lista, debe ampliar la actividad de lista apropiada, en su caso ExpandableListActivity. No podrá encontrar un ExpandableListDialog para extender.

Supongo que es posible que pueda implementarlo en la actividad que llama al cuadro de diálogo, y pasar la vista de lista al cuadro de diálogo como referencia, y agregarlo manualmente a su diseño en el cuadro de diálogo. No estoy seguro si esto funcionará, pero vale la pena intentarlo: D

0

incluso puede hacer android:theme="Theme.Dialog" en el archivo Manifiesto de esa actividad en particular.

Cuestiones relacionadas