web-dev-qa-db-fra.com

Android - setOnClickListener pour TextView

Cela devrait être simple, mais je ne sais pas trop où quelque chose ne va pas ... Je tente de saisir le clic sur la variable TextView avec:

public void runNextTask(){
    final View addView = getLayoutInflater().inflate(R.layout.addnewtracker, null);
    final TrackerInfo newInfo = new TrackerInfo();
    //set up for model selection
    TextView modelTextview = (TextView)addView.findViewById(R.id.modelEdit)

    modelTextview.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}

Le XML pour la TextView est:

<TextView
    Android:id="@+id/model"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="@string/Tracker_model" 
    Android:clickable="true"
    Android:onClick="onClick"/>

Mais lorsque je clique sur la variable TextView, elle n’entre pas dans la méthode onClick() . Qu'est-ce qui me manque?

Merci

10
batuman

Vous pouvez enlever ceci:

Android:onClick="onClick"

Ou supprimez ceci:

modelTextview.setOnClickListener(new OnClickListener() {
    @Override
     public void onClick(View v) {

     }
});

et avoir ceci: 

public void onClick(View v)
{
    // do something
}  

Android:onClick="onClick"/> // Il serait préférable de renommer la méthode pour éviter toute confusion

Aussi, vous avez ceci:

<TextView
     Android:id="@+id/model" // id is model

donc initialisez votre TextView comme ci-dessous:

TextView modelTextview = (TextView)addView.findViewById(R.id.model);
29
Raghunandan

Cette ligne: Android:onClick="onClick" indique à Android de rechercher dans l’activité une méthode portant cette signature:

public void onClick(View v)

Ce n’était pas votre intention, car vous avez défini OnClickListener dans votre code et n’avez pas créé la méthode qui lui est dédiée dans l’activité . Vous avez donc le choix entre supprimer simplement le Android:onClick="onClick" de votre fichier xml ou le supprimer. l'écouteur sur le clic que vous avez créé et changez-le en une méthode onClick (et préférablement changez son nom en quelque chose de mieux que onClick ...

3
IncrediApp
 super.onCreate(savedInstanceState);
 setContentView(R.layout.other_activity);
 findViewById(R.id.TextView).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

    }
});
2
Ravikiran D

Changement :

 TextView modelTextview = (TextView)addView.findViewById(R.id.modelEdit);

à

 TextView modelTextview = (TextView)addView.findViewById(R.id.model);

et il n'y a pas besoin de Android:onClick="onClick" dans votre code xml si vous voulez le faire avec du code Java

1
Tarsem Singh

Si vous changez votre code pour avoir cette structure, cela fonctionnera:

public void runNextTask(){
   ...
}

public void onClick(View v) {

}

lorsque vous indiquez dans votre code xml de capturer le clic pour l'affichage de texte (Android:onClick="onClick") dans le module onClick, vous n'avez pas besoin d'ajouter un écouteur onClick dans votre code Java.

1
maclir

pour chaque composant de vue, nous pouvons appeler setOnclickLister () comme cela pour TextView appelle aussi

textview.setOnclickListener(new setOnclickListener
                           {
                                public void onclick()
                                                   {


                                                    }
                           }
                            );``
0
dileep krishnan