Como usar o setMultichoiceItems () com um alertdialog personalizado que usa um Arrayadapter de eficiência?

StackOverflow https://stackoverflow.com/questions/3410810

  •  25-09-2019
  •  | 
  •  

Pergunta

Estou escrevendo um player de música que usa um adaptador personalizado que estende o BaseAdapter (adaptador de eficiência) que eu quero exibir em um AlertDialog usando setAdapter() onde o usuário pode clicar em uma das músicas para mudar para essa posição na lista de reprodução ou verificar músicas para remover da lista de reprodução. Eu tentei usar um ouvinte de clique em personalizado para que um usuário pudesse clicar por muito tempo para remover o item da lista, mas o listview simplesmente não funciona bem ... estava removendo os itens errados (os que no final), mesmo que o ArrayList continha os itens corretos da lista de reprodução ... (quando eu removi o item do ArrayList, Eu passei para o adaptador que chamou notifyDataSetChanged... mas isso simplesmente não funcionou como eu mencionei. Definitivamente há um bug no AlertDialog ListView... Porque não há razão para que ele tenha apresentado os resultados do final e não do item correto.

Então ... o próximo método que eu gostaria de tentar é usar o setMultiChoiceItems() Método do AlertDialog... mas parece que ele não funciona com um adaptador personalizado ... apenas matrizes simples. Terei que subclasse AlertDialog e Override a setMultiChoiceItems() método ou existe uma maneira de fazê -lo funcionar com um ArrayAdapter?

Basicamente, não consigo descobrir como até mesmo itera a lista que o AlertDialog cria ou se passa por essa visão de alguma forma. Além disso, acho que nem posso ouvir cliques checkboxes Se eu adicioná -los à linha. Qualquer ajuda será muito apreciada.

EDIT: Fazer perguntas aqui é como mágica ... Eu respondi minha própria pergunta ... foi assim que fiz. Eu adicionei uma dica a cada checkbox qual é a posição do item no ArrayList. Então eu usei OnCheckedChangeListener para capturar as seleções. Quando você define uma dica, ele adiciona texto ao checkbox... desde o fundo do AlertDialog O branco (mesmo para itens clicados?) Acabei de definir a cor do texto da dica 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);                         
    }

});
Foi útil?

Solução

Referir este e este

Em seguida, passe uma referência ao byte [] em setMultiChoiceItems().

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

Em seguida, verifique o valor de booleans lado de dentro setPositiveButton().

Se você precisar passar isso AlertDialog por aí, em seguida, estenda -se AlertDialog e criaram um campo booleano, conforme descrito em 1.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top