ListView com CheckBox?

6 respostas
A

Pessoal, fiz aqui um listview que recebe os dados de um ws, e estou tentnado adaptar u m checkbox nele

Mais nos primeiros testes que fiz ja achei estranho o comportamento destes checkbox’s. Por exemplo se eu marco o primeiro checkbox e vou rolando a tela percebi que tem outros itens marcados também sem eu ter chekado estes outros. Então peço ajuda dos colegas para saber o que esta acontecendo?

Obrigado.

6 Respostas

F

Isso depende um pouco de como implementar...
Você quer que o checkbox seja marcado apena quando clicar exatamente nele ou em qlqr lugar do item na listview ?

Você precisa adicionar uma tag ao checkbox com um objeto para controle se esta checado ou não, ou caso, estou utilizando o objto que é utilizado para criar a View da posição 'position' Esse código é caso queria que seja checado apenas se tocar exatamente no checkbox
@Override
public View getView(int position, View view, ViewGroup viewGroup) {

    LayoutInflater factory = LayoutInflater.from(MyApp.getAppContext());
       View itemView = factory.inflate(R.layout.listItem, null);

 MyObject myObj = (MyObject ) getItem(position); //getItem é metodo obrigatório do BaseAdapter
 CheckBox checkBox = (CheckBox) itemView.findViewById(R.id.checkbox);

 if(myObj.toggle){
  checkBox.setChecked(true);
 }else{
  checkBox.setChecked(false);
 }

 checkBox.setTag(myObj); 
        checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
        {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                MyObject item = (MyObject) buttonView.getTag();
                if (isChecked) {
                    item.toggle = true;
                } else {
                    item.toggle = false;
                }

            }
        });
}

Obs. fiz o código na mão agora, pode ser que tenha algum errinho, to sem eclipse no momento ;)
Sou meio ruim para explicar, então, qlqr dúvida so postar.

M

Sobre ele estar marcado:

O ListView implementa com sucesso o recycle de views, então se voce está utilizando o recycleView que vem como parametro ele vai continuar com o estado de marcado que estava na view anterior.

A

Então fabriciov, obrigado por responder

Não implementei nenhum codigo ainda no activity, apenas estou fazendo os testes iniciais e... Como disse estou marcando o primeiro por exemplo e estão sendo marcado oustros na lista sem eu ter marcado.

Meu xml é este
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFF8DC"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/nomeservicogeral"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:textColor="#00008B"
        android:textSize="22sp"
        android:textStyle="bold" />

    <RelativeLayout
        android:id="@+id/InnerRelativeLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <CheckBox
            android:id="@+id/checkBox1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:textColor="#8B0000" />

        <TextView
            android:id="@+id/codigoservicogeral"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/checkBox1"
            android:layout_alignBottom="@+id/checkBox1"
            android:layout_toRightOf="@+id/checkBox1"
            android:textColor="#8B0000"
            android:textSize="15sp" />
    </RelativeLayout>

    <TextView
        android:id="@+id/familiaservicogeral"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#8B0000"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/valorservicogeral"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#8B0000"
        android:textSize="15sp" />

</LinearLayout>

Desculpe...Não entendi sua resposta Marky.Vasconcelos

Sobre ele estar marcado:

O ListView implementa com sucesso o recycle de views, então se voce está utilizando o recycleView que vem como parametro ele vai continuar com o estado de marcado que estava na view anterior.

Obrigado.

M

Poste seu adapter.

A

Marky.Vasconcelos:
Poste seu adapter.
Obrigado Marky.Vasconcelos, mais eu mudei aqui, não vou mais usar CheckBox…Valeu

Mais no mesmo problema a duvida ficou sendo outra cfe o link
http://www.guj.com.br/java/300118-trocar-a-cor-de-um-string

D

cara eu tive mto problema com checkbox em listview ai passe a usar o CheckedTextView funfo liso.

Criado 20 de maio de 2013
Ultima resposta 29 de mai. de 2013
Respostas 6
Participantes 4