2012-12-07 3 views
2

J'ai une vue de liste constituée de deux textviews provenant d'un fichier de mise en page distinct. J'utilise un BaseAdapter pour construire la liste à partir d'un fichier JSON. Je voudrais que la première vue de texte (légende) soit cliquable, si elle est cliquée qu'elle montre la deuxième vue de texte (texte), et si elle est cliquée de nouveau qu'elle la cache.Modification de la visibilité d'une vue de texte dans une vue de liste

Lorsque j'utilise un onClick (android:onClick="ClText"), j'obtiens une erreur. Je pense que je devrais utiliser quelque chose d'un onClickListener, mais depuis que je suis nouveau sur Android, je ne suis pas sûr de savoir comment l'utiliser.

Quelqu'un peut-il m'aider avec le code s'il vous plaît?

+0

il suffit d'utiliser onClickListener dans le code, parce que l'attribut onclick causer beaucoup de problèmes – sam

+0

Ok, mais alors comment puis-je identifier la bonne vue? Puisque toutes les vues dans ListView ont le même ID (mTxtvCaption et mTxtvText) j'en ai besoin pour identifier le bon mTxtvCaption qui a été cliqué et pour rendre le bon mTxtvText visible – Tino

+0

@Tino, vous devez vous assurer de donner à vos vues de texte des ID uniques . –

Répondre

1

Vous avez juste besoin de régler la onClickListener pour le premier élément de la méthode getView de votre classe d'adaptateur qui étend BaseAdapter. Voici un exemple pour illustrer ce que vous essayez de faire.

public class CustomAdapter extends BaseAdapter{ 
    private ArrayList<Thing> mThingArray; 

    public CustomAdapter(ArrayList<Thing> thingArray) { 
     mThingArray = thingArray; 
    } 

    // Get the data item associated with the specified position in the data set. 
    @Override 
    public Object getItem(int position) { 
     return thingArray.get(position); 
    } 

    // Get a View that displays the data at the specified position in the data set. 
    // You can either create a View manually or inflate it from an XML layout file. 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if(convertView == null){ 
      // LayoutInflater class is used to instantiate layout XML file into its corresponding View objects. 
      LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.one_of_list, null); 
     } 

     TextView captionTextView = (TextView) convertView.findViewById(R.id.caption); 
     TextView txt2 = (TextView)findViewById(R.id.text); 

     captionTextView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(txt2.getVisibility() == View.INVISIBLE){ 
      txt2.setVisibility(View.VISIBLE); 
     } else { 
      txt2.setVisibility(View.INVISIBLE); 
     } 
     } 
    }); 

     return convertView; 
    } 
} 
+0

Cela a fait l'affaire! Merci beaucoup! – Tino

+0

Content de pouvoir aider! Ne pas oublier d'accepter :) – mattgmg1990

0

Voici un exemple sur la façon d'utiliser un écouteur de clics avec java:

TextView txt = (TextView)findViewById(R.id.TextView1); 
TextView txt2 = (TextView)findViewById(R.id.TextView2); 
txt.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     txt.setVisibility(View.GONE); 
     txt2.setVisibility(View.VISIBLE); 
    } 
}); 

Honnêtement, au lieu de changer la visibilité des différentes textViews, pourquoi ne pas modifier simplement le texte TextView? Ce serait beaucoup plus simple et ne nécessiterait pas plusieurs TextViews.

+0

Merci! J'y arrive :) Je dois utiliser plusieurs textviews, puisque le JSON contient beaucoup de titres correspondant au texte. Au démarrage, l'application doit afficher uniquement les titres, et cliquez sur le texte correspondant doit être affiché. – Tino

0

Si vous souhaitez basculer entre deux affichages de texte, vous pouvez simplement utiliser un ViewSwitcher. cela vous permet de basculer entre les vues qui s'y trouvent. Vous avez juste à appeler la méthode nextView() et cette méthode est en cours de cycle, de sorte que vous pouvez appeler nextView() sans fin

Vous serez en mesure de changer l'affichage qui est d'affichage.

vous pouvez ajouter le même onClickListener à ces à textview écrire quelque chose comme ceci:

TextView txt = (TextView)findViewById(R.id.TextView1); 

txt.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
     viewSwitcher.nextView(); 
} 
}); 
Questions connexes