2010-10-13 4 views
0

Bonjour en ce qui concerne le problème connu de cases à cocher non désirées vérifiées lors du défilement d'une liste, quelqu'un peut-il me donner une idée de l'utilisation correcte de checkedTextView pour que je puisse maintenir l'état correct lors du défilement la liste. Je pensais que le listview s'occupe de maintenir l'état de case à cocher en utilisant un checkedtextView mais cela ne semble pas être le cas. ou dois-je utiliser l'ID par défaut pour checkedTextView. Je n'arrive pas à trouver un exemple qui utilise un cursorAdapter ou un SimpleCursorAdapter pour ce cas. MerciProblème d'état de la case à cocher dans ListView

J'ai essayé d'utiliser ceci, mais je ne suis pas vraiment sûr de savoir quoi faire avec la position de l'étiquette de réglage. voici un petit morceau de code:

//bindView() method in SimpleCursorAdapter 
//viewHolder holder; 
    //Cursor c; 

    holder.checkedText = (CheckedTextView)view.findViewById(R.id.view_checked); 
    holder.checkedText.setTag(c.getPosition()); 
     holder.checkedText.setOnClickListener(new View.OnClickListener() { 
         public void onClick(View v) 
         { 
           v.getTag(); 
          ((CheckedTextView) v).toggle(); 
         } 
        }); 

ma mise en page standard xml:

<?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"> 

    <ListView android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:choiceMode="multipleChoice"/> 

    <TextView android:id="@android:id/empty" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/no_notes"/> 
</LinearLayout> 

ma mise en page personnalisée:

<?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:orientation="horizontal" 
    android:padding="6dp"> 

<LinearLayout 
     android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="2dp"> 

     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/viewNameText" 
      android:id="@+id/viewNameId"> 
     </TextView> 

    </LinearLayout> 

    <LinearLayout 
     android:orientation="vertical" 
     android:gravity="center_horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1.0" 
     android:padding="2dp"> 


     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="start Date" 
      android:layout_gravity="right" 
      android:id="@+id/DateId"> 
     </TextView> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="start Time" 
      android:layout_gravity="right" 
      android:id="@+id/TimeId"> 
     </TextView> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="right" 
      > 



    <CheckedTextView 
      android:id="@+id/title" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:checked="false" 
      android:focusable="false" 
      android:clickable="true" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
      /> 

    </LinearLayout> 

</LinearLayout>   

Répondre

0

Je pensais que le listview prend soin de maintenir la case à cocher état lors de l'utilisation d'un checkedtextView mais cela ne semble pas être le cas.

Il devrait, si votre ListView est android:choiceMode="multiple".

dois-je utiliser la valeur par défaut Id pour la checkedTextView

Vous pourriez. Les seules fois où j'ai implémenté un choix multiple ListView, j'ai utilisé la disposition de ligne standard plutôt qu'une personnalisée.

+0

oui ma liste a l'attribut choiceMode à multiple. il n'a pas l'Id par défaut cependant. si cette aide, j'utilise un listview \ layout standard dans onCreate et puis en utilisant ma disposition personnalisée pour afficher les éléments. mais mon checkedTextView est dans ma disposition personnalisée. devrais-je le déplacer vers ma mise en page standard? – irobotxxx

+0

J'ai ajouté ma mise en page xml ci-dessus pour montrer ce que je voulais dire. Merci pour le temps à nouveau – irobotxxx

+0

@manuelJ: Essayez de changer le 'android: id' de votre' CheckedTextView' 'android: id =" @ android: id/text1'. Vous pouvez vous référer à cela à partir de votre code Java comme 'android. R.id.text1'. – CommonsWare

Questions connexes