Cómo limitar la selección de casilla de verificación en listview?

amigos,

quiero limitar la selección de la casilla de verificación en android listivew a por ejemplo sólo 3 casillas de verificación debe ser seleccionado de lo contrario debería dar mensaje de error.

el usuario puede seleccionar tres casillas de verificación de la lista cualquiera me guía cómo lograr esto? aquí está mi adaptador

public class AdapterContacts extends BaseAdapter { private LayoutInflater mInflater; public Context context; public static List<myContacts> contacts; public AdapterContacts(Context context,List<myContacts> list) { mInflater = LayoutInflater.from(context); this.context = context; contacts= list; } public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.list_contacts, null); holder = new ViewHolder(); holder.contactName = (TextView) convertView.findViewById(R.id.contactName); holder.contactNumber = (TextView) convertView.findViewById(R.id.contactNumber); holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } myContacts contact = getItem(position); holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton checkboxView, boolean isChecked) { myContacts c = (myContacts) checkboxView.getTag(); c.setSelected(isChecked); // to put that check of selection limit with error } }); holder.checkBox.setTag(contact); holder.checkBox.setChecked(contact.isSelected()); holder.contactName.setText(contact.getContactName()); holder.contactNumber.setText(contact.getPhoneNumber()); return convertView; } @Override public int getCount() { return contacts.size(); } @Override public myContacts getItem(int position) { return contacts.get(position); } @Override public long getItemId(int arg0) { return 0; } class ViewHolder { TextView contactName; TextView contactNumber; CheckBox checkBox; } } 

Cualquier ayuda sería apreciada.

finalmente he resuelto este problema 🙂 donde como globalInc es variable global con valor predeterminado 0

 holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton checkboxView, boolean isChecked) { myContacts c = (myContacts) checkboxView.getTag(); if(isChecked) { globalInc++; } else if(!isChecked) { globalInc--; } if(globalInc >= 4)// it will allow 3 checkboxes only { Toast.makeText(context, "Error = " + globalInc, Toast.LENGTH_LONG).show(); checkboxView.setChecked(false); globalInc--; } else { c.setSelected(isChecked); } System.out.println(" --------------- "+globalInc); } }); 

Tome una variable de conteo int estática e incremente la utilización de estas condiciones

holder.checkBox.isChecked () si es cierto, entonces el incremento en el recuento, luego el recuento de cheques> 3 y luego mostrar el popup al usuario

Espero que esto sea Ayuda.

 int globalInc = 0; boolean isCheckGlobal = false; ArrayList<Integer> checkings = new ArrayList<Integer>(); @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { LayoutInflater inflator = context.getLayoutInflater(); convertView = inflator.inflate(R.layout.list_inner, null); viewHolder = new ViewHolder(); viewHolder.friendName = (TextView) convertView .findViewById(R.id.friendName); viewHolder.checkbox = (CheckBox) convertView .findViewById(R.id.checkbox); final MyAdapterSecond objectMyAdapter = new MyAdapterSecond(); viewHolder.checkbox.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub int getPositionInClick = (Integer) v.getTag(); if (isCheckGlobal == false) { if (checkings.contains(getPositionInClick)) { globalInc--; checkings.remove(checkings.indexOf(getPositionInClick)); } else { objectMyAdapter.getCheck(false); } } else if (isCheckGlobal == true) { if (checkings.size() < 4) { globalInc++; } } } }); viewHolder.checkbox .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { int getPosition = (Integer) buttonView.getTag(); list.get(getPosition).setSelected( buttonView.isChecked()); callCheck(buttonView, "hi1"); if (checkings.size() > 4 { Toast.makeText(context, "Error = " + globalInc, Toast.LENGTH_LONG).show(); objectMyAdapter.setCheck(buttonView); isCheckGlobal = false; } else { buttonView.setSelected(isChecked); if (isChecked && (!checkings.contains(getPosition))) { checkings.add(getPosition); } else if(!isChecked){ if(checkings.contains(getPosition)){ checkings.remove(checkings.indexOf(getPosition)); } } isCheckGlobal = true; } } }); convertView.setTag(viewHolder); convertView.setTag(R.id.friendName, viewHolder.friendName); convertView.setTag(R.id.checkbox, viewHolder.checkbox); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.checkbox.setTag(position); // This line is important. viewHolder.friendName.setText(list.get(position).getname()); viewHolder.checkbox.setChecked(list.get(position).isSelected()); return convertView; } class MyAdapterSecond { CompoundButton buttonView; public void setCheck(CompoundButton buttonView) { this.buttonView = buttonView; } public void getCheck(boolean flag) { this.buttonView.setChecked(flag); } } 

Prueba esto:

 public class AccountListAdapter extends BaseAdapter { @SuppressWarnings("unused") private final static String TAG = AccountListAdapter.class.getSimpleName(); private Context context; private List<Account> rowItems; private int selectedItemCounter = 0; private final int limit; public AccountListAdapter(Context context, List<Account> items, int limit) { this.context = context; this.rowItems = items; this.limit = limit; } public View getView(final int position, View convertView, ViewGroup parent) { LayoutInflater mInflater = (LayoutInflater) context .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); final Account rowItem = (Account) getItem(position); convertView = mInflater.inflate(R.layout.account_selection_item, null); TextView tv = (TextView) convertView.findViewById(R.id.textView); ToggleButton tb = (ToggleButton) convertView .findViewById(R.id.toggleButton); tb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked && !rowItem.isSelected()) { if (selectedItemCounter >= limit) { Toast.makeText(context, "can't be more" + selectedItemCounter, Toast.LENGTH_SHORT).show(); buttonView.setChecked(false); return; } rowItem.setSelected(true); selectedItemCounter++; } else if (!isChecked && rowItem.isSelected()) { rowItem.setSelected(false); selectedItemCounter--; } } }); tv.setText(rowItem.getDevId()); tb.setChecked(rowItem.isSelected()); return convertView; } @Override public int getCount() { return rowItems.size(); } @Override public Object getItem(int position) { return rowItems.get(position); } @Override public long getItemId(int position) { return rowItems.indexOf(getItem(position)); } } 

intentó mejorar mi código con el patrón de ViewHolder pero falló. si alguien tiene una mejor idea, por favor hágamelo saber.

  • Aplicación de contacto como scrollinglist en android
  • Método de movimiento del enlace de texto bloquea listitem
  • Android: no puedo actualizar / volver a dibujar un ListView
  • Elementos de ListView que no se pueden hacer clic con HorizontalScrollView dentro
  • ¿Por qué AdMob no devuelve
  • Lista de elementos con esquinas redondeadas
  • Aplicación de la burbuja de chat de Android en ListView
  • Herramientas de ListView: listitem no funciona en android studio 2.2 stable channel
  • CursorAdapter en ListView
  • Android ListView Deslizar hacia la derecha y hacia la izquierda para aceptar y rechazar
  • Cómo mostrar un botón al final de un ListView de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.