Checkbox auto call onCheckedChange cuando se desplaza el listview?

Tengo un problema con listview cuyo elemento de lista contiene una casilla de verificación. Cuando compruebo una caja y una lista de la voluta, la casilla de verificación alguna vez la llamada automática oncheckedchange y el valor de la casilla de verificación se cambian!

¿O, cuando mi lista tiene más de 9 o 10 artículo, entonces cuando comprobé en el artículo 1, el artículo 8 o 9 está comprobado ???

¿Alguien puede decirme qué puedo arreglar este error?

¡Gracias por adelantado!

List_item.xml

<ImageView android:layout_alignParentLeft="true" android:layout_width="36dip" android:layout_height="36dip" android:layout_centerVertical="true" android:scaleType="fitCenter" android:id="@+id/image_view" android:src="@drawable/icon" /> <TextView android:layout_toRightOf="@id/image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="5dip" android:id="@+id/text_view" android:lines="1" android:textSize="20sp" android:textColor="@color/white" /> <TextView android:layout_toRightOf="@id/image_view" android:layout_below="@id/text_view" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingLeft="5dip" android:id="@+id/text_view2" android:textSize="14sp" android:lines="1" android:textColor="@color/white" /> 

Y aquí está la vista del adaptador:

  public View getView(int position, View convertView, ViewGroup parent) { Log.e(TAG, "getView"); ViewHolder mViewHolder; if (convertView == null) { Log.e(TAG, "Inflater is inflating..."); convertView = mInflater.inflate(R.layout.custom_list_app, null); mViewHolder = new ViewHolder(); mViewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.checkbox); mViewHolder.remove = convertView.findViewById(R.id.music_info); convertView.setTag(mViewHolder); } else { mViewHolder = (ViewHolder) convertView.getTag(); Log.e(TAG, "Position: " + position + " CheckBox: " + mViewHolder.checkbox.isChecked()); } mViewHolder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton cb, boolean flag) { // TODO Auto-generated method stub if (flag) { Log.d(TAG, "Checkbox checked"); } else { Log.d(TAG, "Checkbox un-checked"); } } }); return convertView; } 

El ListView recicla las clases de vista: necesitará establecer explícitamente si el CheckBox está o no seleccionado en la clase getView . Así que agrega un cheque como

 /** * Ensure no other setOnCheckedChangeListener is attached before you manually * change its state. */ mViewHolder.checkbox.setOnCheckedChangeListener(null); if(shouldBeChecked) mViewHolder.checkbox.setChecked(true); else mViewHolder.checkbox.setChecked(false); 

Antes de llamar setOnCheckedChangeListener .

 holder.cBox.setOnCheckedChangeListener(null); holder.cBox.setChecked(list.get(position).isChecked()); holder.tvName.setText(item.getName()); holder.cBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { list.get(position).setChecked(true); } else { list.get(position).setChecked(false); } } }); 

En la lista, el elemento tiene un atributo para establecer si el elemento está marcado o no. Puede utilizarlo para configurar el elemento si está marcado, y primero debe

 cBox.setOnCheckedChangeListener(null); cBox.setChecked(list.get(position).isChecked()); 

A continuación, establezca el verdadero new OnCheckedChangeListener()

Espero que mi respuesta sea útil para usted y para aquellos que miran esta página o tienen problemas para tratar con listas que tienen casillas de verificación de elementos.

No estoy seguro si esto es una manera aseada. Pero el siguiente código resolvió mi problema. Incluso en el siguiente código, el setOnCheckChangeListener () se estaba llamando (leer falsamente disparado) en el desplazamiento de la lista. La tarea consistía en mantener una lista de elementos seleccionados por el usuario. Así que cuando hay un disparador, remito primero mi lista y sólo agrego un ítem si no estaba ya presente en la lista, de lo contrario ignoro la devolución de llamada.

 @Override public View getView(final int position, View convertView, final ViewGroup parent) { MenuViewHolder menuViewHolder = null; MenuView item = getItem(position); LayoutInflater inflater = ((Activity) context).getLayoutInflater(); convertView = inflater.inflate(R.layout.food_menu_list_layout, null); TextView textView = ((TextView) convertView.findViewById(R.id.menu_item_entry)); TextView price = (TextView) convertView.findViewById(R.id.price); CheckBox ordered = (CheckBox) convertView.findViewById(R.id.checkBox); menuViewHolder = new MenuViewHolder(textView, price, ordered); menuViewHolder.dishName.setText(menuViewList.get(position).getItemname()); menuViewHolder.price.setText("$" + menuViewList.get(position).getPrice()); menuViewHolder.ordered.setChecked(menuViewList.get(position).isSelected()); menuViewHolder.ordered.setOnCheckedChangeListener(null); menuViewHolder.ordered.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { MenuView checkedItem = menuViewList.get(position); if (buttonView.isChecked()) { //add item only if not already added if (!checkedItem.isSelected()) { MainActivity.menuViews.add(checkedItem); checkedItem.setSelected(buttonView.isChecked()); } } else { //remove only if already added if (checkedItem.isSelected()){ MainActivity.menuViews.remove(checkedItem); checkedItem.setSelected(buttonView.isChecked()); } } ((MainActivity) context).displayCurrentSelectionAmt(); } }); return convertView; } 

La mayoría de estos están demasiado involucrados (pero funcionan). Todo lo que intenta hacer es detener el evento .setChecked al disparar si se está cargando la vista y establecer el estado marcado. Por lo tanto, establezca una variable de clase local isLoading, establezca en true al principio de getView y defínalo en false al final de getView. A continuación, en el oyente de clics, compruebe isLoading

 boolean isLoading; public View getView(int position, View convertView, ViewGroup parent){ isLoading = true; ...do your initialization here isLoading = false; return convertView; } checkview.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton pckView, boolean pisChecked) { if(! isLoading) { ...do your things when the check is actually clicked } } }); 

El OnClickListener se ha trabajado para mí con el mismo problema y puedo enviar un dato a otra actividad

Holder.cks.setOnClickListener (new View.OnClickListener () {

  @Override public void onClick(View v) { final boolean isChecked = holder.cks.isChecked(); if (isChecked) { System.out.println(position + "Checked"); holder.cks.setChecked(true); positionArray.set(position, true); DATA2="1"; } else { System.out.println(position + "unChecked"); holder.cks.setChecked(false); positionArray.set(position, false); DATA2 = "0"; } DATA1=String.valueOf(position+1); DATA3=map.get(COL5); DATA4=map.get(COL6); DATA5=map.get(COL7); Intent intent = new Intent(activity, updatelicaldata.class); intent.putExtra("message1", DATA1); intent.putExtra("message2", DATA2); intent.putExtra("message3", DATA3); intent.putExtra("message4", DATA4); intent.putExtra("message5", DATA5); System.out.println("ACTIVITY IS START"); activity.startActivity(intent); } }); 
  • Android Checkbox listview seleccionar todo (desactivar / activar)
  • Listview - Pie de página en la parte inferior de la pantalla
  • Refrescante adaptador al tirar de ListView en android
  • ListView onItemClickListener no se llama
  • En ListView: la actividad ha filtrado ServiceConnection <youtube.player.internal> que estaba vinculado originalmente aquí
  • ListView circular (elementos en el medio círculo)
  • Cómo llamar a notifyDataSetChanged () desde un adaptador genérico
  • Android AppBarLayout superpone la vista de lista
  • Cuando se desplaza un listview con un adaptador personalizado demasiado rápido arriba y abajo, getView () comienza a comportarse de manera extraña. ¿Por qué?
  • Eliminar elemento de la lista personalizada al pulsar el botón
  • Obtener un elemento seleccionado en listview cuando genero el menú contextual
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.