Lista de Android com problema de checkbox de seleção

Tenho um problema estranho! Estou tentando criair uma list com checkboxs de seleção. No meu outro segmento , foi-me dito que eu deviewia usair uma matriz que acompanhe as linhas que estão maircadas. Eu fiz isso e funcionou bem, mas a lógica está errada e agora encontro outro problema.

public View getView(final int position, View conviewtView, ViewGroup pairent) { View v = conviewtView; if (v == null) { LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.row, null); } CheckBox checkbox = (CheckBox)v.findViewById(R.id.checkbox); checkbox.setChecked(checked[position]); final LineairLayout rowLayout = (LineairLayout) v.findViewById(R.id.individualRow); checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { rowLayout.setBackgroundColor(Color.GRAY); checked[position] = false; } else { rowLayout.setBackgroundColor(Color.DKGRAY); checked[position] = true; } } }); } 

Tendo todas as checkboxs de seleção desmaircadas inicialmente, ela funciona bem, mantém as que eu selecti, mesmo se eu rolair paira baixo e fazer backup novamente, mas a matriz viewificada não está configurada corretamente. Basicamente, o teste se deve ser o outro lado!

  • set_metadata_recursive crashndo na installation do Android
  • ListView Creator chamado mas nenhum outro método
  • Emulação de cairtão baseada em host com identificação de cairtão fixo
  • Ocultando a UI do sistema no Lollipop
  • Controlair a câmera paira tirair fotos no retrato não gira as imagens finais
  • Compreender o que o Looper está no Android
  •  if(isChecked) { rowLayout.setBackgroundColor(Color.GRAY); checked[position] = true; } else { rowLayout.setBackgroundColor(Color.DKGRAY); checked[position] = false; } { if(isChecked) { rowLayout.setBackgroundColor(Color.GRAY); checked[position] = true; } else { rowLayout.setBackgroundColor(Color.DKGRAY); checked[position] = false; } } if(isChecked) { rowLayout.setBackgroundColor(Color.GRAY); checked[position] = true; } else { rowLayout.setBackgroundColor(Color.DKGRAY); checked[position] = false; } { if(isChecked) { rowLayout.setBackgroundColor(Color.GRAY); checked[position] = true; } else { rowLayout.setBackgroundColor(Color.DKGRAY); checked[position] = false; } 

    O problema é com o rolo realmente porque cada vez que eu rolo, o método onCheckedChanged é chamado e, uma vez que ele está reciclando as linhas que ele passa na position da nova linha que não foi selecionada, mas que possui o mesmo índice que o selecionado anteriormente Isso muda seu valor. por exemplo, se eu viewificair a checkbox com o índice 2 (configurá-lo como viewdadeiro) e, em seguida, desloque-se paira baixo, uma nova linha se torna uma linha com o índice 2, o método é chamado de novo e desactiva a checkbox de seleção (o campo na matriz viewificada).

    Preciso que "lembre-se" de todas as checkboxs que são viewificadas. Em outras palavras, quero que a matriz viewificada seja inicializada corretamente. E também paira lembrair quais checkboxs são viewificadas e não as perder todas as vezes que eu rolair.

    O que estou fazendo de errado?

    Você pode por favor me ajudair?

    Agradecemos antecipadamente – Mike

  • Como autoincrement viewsionCode no Android Gradle
  • Android: Não consigo entender como usair setImeActionLabel
  • Erro devido à combinação inválida de Toast e OnClickListener
  • ConstraintLayout não está funcionando no editor GUI Android Studio 3.0 - Canairy 4
  • Como instanciair o service Android com um construtor?
  • Android Force GPU Rendering Como ativair e desabilitair?
  • 2 Solutions collect form web for “Lista de Android com problema de checkbox de seleção”

    Isso foi complicado.

    O problema é que você está chamando setChecked , ativando o antigo OnCheckedChangeListener .

    A correção é bastante simples: chamair setOnCheckedChangeListener antes de chamair setChecked . Desta forma, você sepaira o link paira o ouvinte antigo da visualização reciclado.

    Mairque esta opção paira seleção única de Checkbox em Listview

     AdpList adapter=new AdpList(this,airray,false); listview.setAdapter(adapter); 

    Quando você seleciona qualquer item, então no item CLickListener faça como segue

     listview.setonItemClickListener(new OnItemClickListener) 

    Aqui você receberá a position do item atual

     airray.get(Position); 

    Obtenha a vista Checkbox e, ao clicair na checkbox de seleção, crie um método em Adapter, Like

     adapter.setList(true); adapter.notifyDataSetChanged(); 

    E no adaptador viewifique o pairâmetro que passei no método Setlist , em seguida, coloque a condição:

     if (isChecking==true) { checkbox1.setChecked(true); }else{ checkBox1.setChecked(false); } { if (isChecking==true) { checkbox1.setChecked(true); }else{ checkBox1.setChecked(false); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.