2011-09-14 5 views
1

J'ai marqué l'autre thread à supprimer, parce que la question principale a été éditée tant de fois, qu'elle est devenue confuse.Comment faire pour setOnCheckedChangeListener (Checkboxes ListView pour travailler)

Le problème est: Je veux remplir un ListView avec des cases à cocher, et que je souhaite personnaliser mon ListView Je ne suis pas en utilisant simple_multiple_choice_mode, je mets ma mise en page sur list_item.xml: (pour chaque ligne)

 <CheckBox> 
       xmlns:android="http://schemas.android.com/apk/res/android" android:paddingLeft="8mm" 
       android:layout_width="fill_parent" 
        android:layout_height="wrap_removed" android:id="@+id/nomeAPP" style="?listItem"&gt; 
        </<CheckBox> 

mon ListView est sur lista.xml

<ListView android:id="@android:id/list" 
    android:layout_width="fill_parent" android:layout_height="wrap_content" 
    style="?whiteBackground"> 

mon adaptateur:

 list=getListView(); 
       this.setListAdapter(new ArrayAdapter&lt;String&gt;(this, 
         R.layout.list_item, aux)) 

Donc j'essaye de faire un setOnCheckedChangeListener pour les cases à cocher, ainsi je peux stocker les éléments choisis dans un tableau.

donc je l'ai fait auditeur:

 CheckBox cb = (CheckBox) findViewById(R.id.CheckBox01); 
       cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

        public void onCheckedChanged(CompoundButton buttonView, 
          boolean isChecked) { 
         // TODO Auto-generated method stub 
         if (buttonView.isChecked()) { 
          Toast.makeText(getBaseContext(), &quot;Checked&quot;, 
            Toast.LENGTH_SHORT).show(); 
          } 
         else 
         { 
          Toast.makeText(getBaseContext(), &quot;UnChecked&quot;, 
            Toast.LENGTH_SHORT).show(); 
         } 

        } 
        }); 

problème est: Je reçois l'exception NULL. Le CURIEUX chose est: si je « switch » ma mise en page pour un simple

<ScrollView android:id="@+id/widget54" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"  xmlns:android="http://schemas.android.com/apk/res/android"> 

    <LinearLayout android:orientation="vertical" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <CheckBox android:text="Checkbox" android:id="@+id/CheckBox01" 
     android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox> 
    </LinearLayout> 

</ScrollView> 

Et oublie mon ListView (et mon adaptateur), ça marche! Alors, quel est le problème avec ma mise en page?

J'ai créé un nouveau petit projet juste pour vous permettre de voir exactement la situation. Il est disponible HERE À l'heure actuelle ne fonctionne pas, mais si vous décommentez l'adaptateur, changez ListActivity en Activity et changez setContentView, cela fonctionnera (texte toast coché/non coché).

Une autre chose curieuse, j'ai trouvé est que, avec ListActivity ne fonctionne pas .... jamais se demander si elle est liée ...

+1

pouvez-vous publier le journal des exceptions null? –

Répondre

1

ok, je pense que je suis votre problème,

CheckBox cb = (CheckBox) findViewById(R.id.CheckBox01); 

Cela fonctionne dans la deuxième mise en page, car vous avez peut-être déjà défini l'affichage de l'activité à l'aide de setcontentview().

Ainsi, le problème de l'activité de votre liste est que la ligne mentionnée ci-dessus ne sait pas, quelle disposition il doit chercher à trouver id,

R.id.CheckBox01 

vous devez obtenir l'accès à la mise en page affichage que vous êtes en train de gonfler la liste, appelons-le inflatedView, puis vous accédez à la case à cocher comme ceci.

CheckBox cb = (CheckBox) inflatedView.findViewById(R.id.CheckBox01); 

si vous ne définissez pas la vue du contenu, vous devez indiquer la fonction findViewById(), où il doit chercher la vue. Je le confirmerais si vous publiez le journal NPE.

HTH.

+0

Malheureusement, il y a quelque chose qui manque dans votre pensée - est-ce, setContentView (R.Layout.Lista) est présent pour la "première situation", donc l'application sait où se trouve ListView et l'adaptateur sait où se trouve chaque rangée avec le R.layout.List_item .... Malgré cela, j'ai essayé d'utiliser votre solution mais je '' Je ne sais pas comment m'adapter. Que devrais-je faire avant cette ligne? Parce que inflatedView est une variable de quelque chose ... une vue? @yashwanthkumar vous avez tout le code disponible si vous voulez avoir un look .. – Tiago

+0

suivez les 2 liens, je pense qu'ils vont vous aider à accéder à votre case à cocher dans le bon sens, l'idée est que vous devez accéder à la case à cocher la méthode getView(), http://android-er.blogspot.com/2010/06/custom-arrayadapter-with-with-different.html, http://www.ezzylearning.com/tutorial.aspx?tid= 1763429 & q = personnalisation-android-listview-items-with-custom-arrayadapter –

+0

Merci. J'ai maintenant quelques problèmes en personnalisant l'adaptateur mais je suis sûr que c'est le chemin. – Tiago

Questions connexes