Red de conocimiento informático - Material del sitio web - Cómo implementar una selección única o múltiple de varios elementos en una lista personalizada

Cómo implementar una selección única o múltiple de varios elementos en una lista personalizada

El elemento ListView personalizado contiene una vista de texto y una casilla de verificación. La casilla de verificación está seleccionada en un nivel superior al del elemento, por lo que está bloqueada en el xml.

Método de selección de radio: (Este método también se aplica a los botones de opción)

main.xml

lt? versión xml = "1.0" codificación = "utf-8"? gt

diseño lineal xmlns: Android = "/apk/RES/Android "

Android: diseño _ ancho = " match _ parent "

Android: diseño _ altura = " match _ parent "

android:orientation="vertical"

gt

ltimageview

android:id =" @ id/img "

Android: diseño _ ancho = " relleno _ padre "

Android: diseño _ altura = " ajuste _ contenido "

Android: src = " @ drawable/triangle 16 blue " / gt;

vista de lista lt

android: id="@ id/lvGroup "

Android :layout_width = "fill_parent"

Android:layout_height = "fill_parent"

Android:background = "@drawable/down button_corner"/gt ;

lt/diseño lineal gt; ltlinear diseño xmlns: Android = "/apk/RES/Android "

Android: diseño _ ancho = " fill _ parent "

Android:layout_height = "fill_parent"

Android:orientation = "horizontal" gt;

vista lttext

android:id ="@ id/item_tv "

android: textSize ="18sp "

android:layout_width="0dp "

Android:layout_height = " wrap_content "

android:layout_weight="1 "

Android: gravedad = "centro_vertical"/ gt

lt test box

android: id="@ id/item_cb "

Android: diseño _ ancho = " ajuste _ contenido "

Android: diseño _ altura = " ajuste _ contenido "

android:focusable="false "

android:clickable="false "

Andro

id: focusableInTouchMode = " false "

Android: gravedad = " center_vertical "/gt;

lt/diseño lineal gt;MainActivity.java

Clase pública MainActivity extiende Actividad {

Cadena final estática privada TAG = " MainActivity

ListView privado listView

Lista de matriz privada lt String gt grupo;

@Override

public void on create(Estado de instancia guardado del paquete){

super . /p>

listView =(listView)this . findviewbyid(r . id . list);

grupos = new ArrayList lt string gt();

groups . " 11 ");

grupos . agregar(" 22 ");

grupos . agregar(" 33 "); ");

grupos. add(" 55 ");

grupos. add(" 66 ");

grupos. add (" 77 ") ;

adaptador de grupo = nuevo adaptador de grupo (este, grupos);

listView.setAdapter (adaptador);

listview . /p>

OnItemClickListener listItemClickListener = new OnItemClickListener(){

@Override

public void onItemClick(adapter view lt;? gt parent, view view, int position,

long id) {

//// Obtenga el objeto ViewHolder, eliminando la necesidad de crear una instancia de cb que necesitamos a través de las capas de findViewById.

portador de vista titular de vista =(portador de vista)view .gettag();

portador de vista toggle() //Cambia el estado seleccionado de CheckBox al actual. estado Invertido, la vista de cuadrícula garantiza que esté seleccionada una sola vez.

}

};

}

}

}

Adaptador de grupo. java

La clase pública GroupAdapter extiende BaseAdapter {

Actividad de actividad privada; //Contexto

Lista de matriz privada lt string gt list; diseño privado inflador inflador = null; //Importar diseño

private int temp =-1;

public GroupAdapter(contexto de actividad, ArrayList lt string gt list) {

this.activity = contexto

this.list = lista

inflater=LayoutInflater.from(contexto);

}

@Override

public int getCount() {

Lista de retorno();

}

@Override

Objeto público getItem(int posición) {

Lista de retorno get(posición

}

@Override

. public long getItemId(int position){

//TODO código auxiliar de método generado automáticamente

Posición de retorno;

}

//Esto La función se ejecuta cada vez que //listview muestra una fila de datos.

@Override

Vista pública getView(int position, View convertView, ViewGroup parent) {

ViewHolder titular = null

If ( convertView==null) {//Cuando el control ListView se carga por primera vez, convertView está vacío.

convertir vista = inflar . inflate(r . diseño . grupo _ elemento _ vista, nulo); // Entonces esta declaración se ejecutará cuando el control ListView no se deslice.

titular = nuevo titular de vista();

titular . TV =(TextView)convertir vista . titular .CB =(CheckBox)convertir vista .findviewbyid(r . id . item _ CB

convertir vista .

}

De lo contrario{//Retire el soporte.

holder = (view holder)convert view . gettag(); //Objeto almacenado en esta vista como una etiqueta

}

//Lista de configuración Se muestra la vista de texto.

titular.tv.setTextColor(color.

white);

holder . settext(list . get(position));

//Establezca el estado marcado de la casilla de verificación según isSelected.

holder.cb.setId(position); //Restablece la identificación de la casilla de verificación a la posición actual.

holder . CB . setoncheckedchangelister(new oncheckedchangelister(){

//Establece la última casilla seleccionada en falso.

@Override

public void onchecked cambió (vista de botón compuesto, booleano isChecked) {

If(isChecked){//Implemente la función del botón de opción de la casilla de verificación, que también se aplica al botón de opción. if(temp!=-1){

//Busca la última casilla de verificación en la que se hizo clic y configúrala en falso. Al volver a seleccionar, puedes cerrar la casilla de verificación anterior

CheckBox temp CheckBox =. (CheckBox)actividad. findviewbyid(temp);

if(tempCheckBox!=empty)

temp casilla de verificación marcada

}

temp = botón vista . getid(); //Guarda el valor de identificación de la casilla de verificación actualmente seleccionada

}

}

. });

//sistema . println(" temp:" temp);

//system . println(" posición:" posición);

If(position==temp)//Compare si la posición es consistente con la temperatura actual.

titular CB . conjunto marcado(verdadero);

Otros

titular CB . convertView

}

Visor de categorías estáticas {

TextView TV;

Casilla de verificación CB;

}

}

La casilla de verificación Listview implementa múltiples cuadros de selección

MainAcitvity.java

La clase pública MainActivity extiende la actividad {

Cadena final estática privada TAG = " MainActivity

ListView privado listView

Lista de matriz privada lt cadena gt grupo;

@override

público void on create(Estado de instancia guardado del paquete){

super .oncreate(savedInstanceState);

setContentView(r . layout . main); )this .findviewbyid(r . id . list);

grupos = new ArrayList lt string gt()

grupos ;

grupos . agregar(" 22 ");

grupos . grupos . agregar(" 55 ");

grupos . agregar(" 66 "

grupos .

adaptador de grupo = nuevo adaptador de grupo(este, grupos);

listView.setAdapter(adapter);

listview.setonitemclicklistener(listItemClickListener);

OnItemClickListener listItemClickListener = new OnItemClickListener(){

@override

public void onItemClick(adapter view lt;? gt parent, view view, int position,

long id) {

////Obtiene el objeto ViewHolder, eliminando la necesidad de crear una instancia del cb que necesitamos a través de las capas de findViewById Pasos de ejemplo.

portador de vista titular de vista =(portador de vista)view .gettag();

portador de vista toggle() //Cambia el estado seleccionado de CheckBox al actual. estado Invertido, la vista de cuadrícula garantiza que esté seleccionada una sola vez.

GroupAdapter.getIsSelected().

put(posición, titular de la vista. CB. está marcado()); //Registra el estado marcado de la casilla de verificación.

}

};

}

}

GroupAdapter.java

La clase pública GroupAdapter extiende BaseAdapter {

Contexto de contexto privado; //Contexto

Lista de matriz privada lt string gt list

//Casilla de verificación de control elija.

HashMap estático privado lt entero, booleano gtisSelected

diseño privado inflador inflador = null; //Importar diseño

public GroupAdapter(Contexto de contexto, ArrayList lt cadena de caracteres lista gt){

this.context = contexto

this.list = lista

inflater=LayoutInflater.from(context);

isSelected = new HashMap lt entero, booleano gt();

initData();

}

Private void initData(){//Inicialización de datos seleccionados. .

for(int I = 0;i ltlist . size();i ){

getIsSelected(). put(i,false);

}

}

@override

public int getCount() {

Lista de retorno tamaño();

}

@Override

Objeto público getItem(posición int) {

Lista de retorno. .get(position);

}

@override

public long getItemId(int position){

//TODO generado automáticamente Stub de método

Posición de retorno;

}

//Esta función se ejecuta una vez cada vez //listview muestra una fila de datos.

@Override

Vista pública getView(int position, View convertView, ViewGroup parent) {

ViewHolder titular = null

If ( convertView==null) {//Cuando el control ListView se carga por primera vez, convertView está vacío.

convertir vista = inflar .inflate(r . diseño . grupo _ elemento _ vista, nulo); // Entonces esta declaración se ejecutará cuando el control ListView no se deslice.

titular = nuevo titular de vista();

titular .TV =(TextView)convertir vista .findviewbyid(r . id . item _ TV

); titular .CB =(CheckBox)convertir vista .findviewbyid(r . id . item _ CB

convertir vista .

}

De lo contrario{//Retire el soporte.

holder = (view holder)convert view . gettag(); //Objeto almacenado en esta vista como una etiqueta

}

//Lista de configuración Se muestra la vista de texto.

holder.tv.setTextColor(color.white);

holder . settext(list . get(position));

//Según isSelected Establece el estado marcado de la casilla de verificación.

titular . CB . set check(getIsSelected(). get(position));

Devolver convertView

}

Categoría estática. Visor {

TextView TV;

Casilla de verificación CB;

}

HashMap estático público ltInteger, booleano gtgetIsSelected( ){

return isSelected

}

public static void setIsSelected(HashMap lt; integer, Boolean gtisSelected){

el adaptador de grupo está seleccionado = está seleccionado. ;

}

} Entre ellos, getview es responsable de mostrar cada fila del elemento de la vista de lista, y getview se ejecuta una vez que se muestra cada fila.

Si desea realizar una única selección, debe guardar el valor de posición de la casilla de verificación actualmente seleccionada y compararlo con la posición de cada elemento en la vista de lista. Establezca la casilla de verificación ischeck=true solo si son iguales

Solo el setOnCheckChangeListener de la casilla de verificación puede hacer esto, guardar el último valor de posición en el que se hizo clic y restablecer el valor de identificación de la casilla de verificación. temp guarda el valor de identificación.

Getview es responsable de mostrar datos y onitemselectedlistener es responsable de enviar mensajes, extraer datos y procesar datos.