2010-05-20 5 views
7

J'utilise une case à cocher dans mon code qui, lorsqu'elle est cochée, rend un textview et un editText visibles, mais si je décoche une case à cocher, ils restent visibles au lieu de disparaître.Problème de visibilité avec la case à cocher

Voici le code:

final CheckBox save = (CheckBox) findViewById(R.id.checkbox); 
     save.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 



       // Perform action on clicks, depending on whether it's now checked 
       if (((CheckBox) v).isChecked()) { 

        nameText.setVisibility(1); 
        editName.setVisibility(1); 

       } else { 

        nameText.setVisibility(0); 
        editName.setVisibility(0); 

       } 
      } 
     }); 

et une partie du xml qui se trouve dans une disposition relative:

<LinearLayout android:id="@+id/linearLayout3" 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below = "@+id/linearLayout2"> 

    <TextView android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/name" 
     android:visibility="invisible"/> 
    <EditText android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:visibility="invisible"/>  


    <CheckBox android:id="@+id/checkbox" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/save" /> 
</LinearLayout> 

Que dois-je faire pour rendre le dissapear textView et EditText quand je décocher la case à cocher?

Merci!

+0

Je suis d'accord avec Roflcoptr mais récemment, je l'ai expérimenté avec quelques associés problèmes et trouvé que si vous avez fait (pour une raison folle) veulent utiliser des valeurs entières ils ne sont pas 0 et 1 mais plutôt c'est: 0 - visible 4 - invisible 8 - gone Je ne sais pas pourquoi ce sont des multiples de 4. –

Répondre

14

utilisation View.VISIBLE, View.INVISIBLE, View.GONE pour contrôler la visibilité (au lieu de 0 & 1).

+0

! Ça fait l'affaire! – fxi

6

Deux choses:

  1. Vous devez utiliser setOnCheckedChangeListener(), ce qui rendra la vie plus facile. Vous devez utiliser View.GONE et View.VISIBLE au lieu des entiers pour setVisibility().

+0

merci pour votre réponse! – fxi

2

le problème est dans cette partie:

// Perform action on clicks, depending on whether it's now checked 
       if (((CheckBox) v).isChecked()) { 

        nameText.setVisibility(1); 
        editName.setVisibility(1); 

       } else { 

        nameText.setVisibility(0); 
        editName.setVisibility(0); 

       } 

yout ne doivent pas utiliser des valeurs entières, mais au lieu d'utiliser les constantes fournies par la vue classe

// Exécuter l'action sur les clics, selon que l'on est maintenant cochée if (((CheckBox) v) .isChecked()) {

   nameText.setVisibility(View.VISIBLE); 
       editName.setVisibility(View.VISIBLE); 

      } else { 

       nameText.setVisibility(VIEW.INVISIBLE); 
       editName.setVisibility(VIEW.INVISIBLE); 

      } 

au lieu d'invisible, vous pouvez également utiliser GONE. alors votre TextEdit invisible n'a pas besoin d'espace dans la mise en page

si vous cochez la API vous verrez que 1 n'est pas un paramètre valide:

+0

vous remercie pour votre réponse! – fxi

Questions connexes