2010-08-05 15 views
7

Estoy escribiendo un reproductor de música que utiliza un adaptador personalizado que amplía BaseAdapter (adaptador de eficiencia) que quiero mostrar en AlertDialog usando setAdapter() donde el usuario puede hacer clic en una de las canciones para cambiar a esa posición en la lista de reproducción O verificar canciones para eliminar de la lista de reproducción. Intenté usar un oyente click personalizado para que un usuario pudiera hacer clic largo y listo para eliminar el elemento de la lista, pero el listview simplemente no funcionaba correctamente ... eliminaba los elementos incorrectos (los que estaban al final) aunque el ArrayList contenía los elementos correctos de la lista de reproducción ... (cuando eliminé el elemento del ArrayList, lo pasé al adaptador que llamó a notifyDataSetChanged ... pero eso simplemente no funcionó como mencioné. Definitivamente hay un error en el AlertDialog ListView ... porque no hay ninguna razón para que se haya salido de los resultados del final en lugar del elemento correcto.¿Cómo se usa setMultiChoiceItems() con un AlertDialog personalizado que usa un arrayadapter de eficiencia?

Entonces ... el siguiente método que me gustaría probar es utilizar el método del AlertDialog ... pero parece que no funciona con un adaptador personalizado ... solo arreglos simples. ¿Tengo que clasificar AlertDialog y Override el método setMultiChoiceItems() o hay alguna manera de hacerlo funcionar con un ArrayAdapter?

Básicamente, no puedo encontrar la manera de iterar la lista que crea AlertDialog o si incluso pasa esa vista de alguna manera. Además, no creo que pueda escuchar los clics en checkboxes si los agrego a la fila. Cualquier ayuda será apreciada.

EDIT: Hacer preguntas aquí es como magia ... Respondí a mi propia pregunta ... así es como lo hice. Agregué una pista para cada checkbox que es la posición del artículo en el ArrayList. Luego usé OnCheckedChangeListener para capturar las selecciones. Cuando establece una sugerencia, agrega texto al checkbox ... ya que el fondo del AlertDialog es blanco (¿incluso para elementos cliqueados?) Simplemente configuro el color del texto de sugerencia como transparente.

holder.check.setHintTextColor(Color.TRANSPARENT); 
holder.check.setHint(String.valueOf(position)); 
holder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

public void onCheckedChanged(CompoundButton buttonView, 
      boolean isChecked) { 
     int position = Integer.parseInt((String) buttonView.getHint()); 
     Log.v("onCheckedChanged", "Checked: "+isChecked+" returned: "+position+" which should be "+getItem(position).name);       
    } 

}); 
+0

su pregunta es respondida por usted mismo en su propia pregunta. Intente copiar/pegar el texto y use el mecanismo de respuesta correctamente. – Pabluez

Respuesta

3

Consulte This y This

continuación pasa una referencia a byte [] en setMultiChoiceItems().

final boolean[] booleans = {false, true, false, true, false, false, false}; 

A continuación, compruebe el valor de booleans dentro setPositiveButton().

Si necesita pasar esto AlertDialog alrededor, luego extienda AlertDialog y crear un booleano de campo como se describe en 1.

Cuestiones relacionadas