Signaler

OnClick sur textview [Résolu]

Posez votre question Debutant en webmastering 341Messages postés lundi 6 juin 2011Date d'inscription 24 août 2017 Dernière intervention - Dernière réponse le 2 juin 2017 à 17:38 par Debutant en webmastering
Bonjour,

dans le cadre d'un projet, je suis soumis à la contrainte de passer par un onClick sur une textView (contrainte me permettant de ne pas dénaturer l'existant)

en faisant quelques recherches, je suis tombé sur une solution, à savoir :

 

//In you Xml add this,android:clickable="true"

//in you activity use like this,

textView.setOnClickListener(new View.OnClickListener(){
    public void onClick(){

    }
}



Il semblerait d'après la doc java que cette fonctionnalité ne soit plus disponible (ou alors je ne l'ai pas trouvée, c'est tout à fait possible), je suis tombé sur du onKeyUp, qui "pourrait" résoudre le problème, mais en appelant ma textView, je n'accède pas à ce genre de fonctionnalités via l'Intellisense.

Auriez-vous une solution pour résoudre ce problème ?



Utile
+1
plus moins
Non, le contexte n'a pas changé. C'est juste que this ne représente pas ce que tu attends ;)
Lorsque tu es dans la méthode
onClick()
, tu fais partie d'un object de type
OnClickListener
. Donc, à ce niveau, le
this
représente cet objet. Tu dois donc utiliser le contexte de l'Activity:
Intent asking_if_time = new Intent(TonActivity.this, Asking_If_Time.class);

Quelques remarques:
- une bonne pratique au niveau du nommage des variables est de garder le type de l'objet, notamment pour les Activity. Quand on regarde ton code, on ne sait pas que Asking_If_Time est de type Activity. Je te propose AskingIfTimeActivity
- une autre bonne pratique est de ne pas utiliser d'underscore. Il faut préférer la notation CamelCase
- Sur CCM, pense à utiliser le bouton "Répondre au sujet" en bleu plutôt que d'ajouter un commentaire

@+ 
Buno, Modo CS-CCM 
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai... 
The urgent is done, the impossible is underway. For miracles, provide for a delay...
Cette réponse vous a-t-elle aidé ?  
Donnez votre avis
Utile
+0
plus moins
Hello,

Pourquoi dis-tu qu'elle n'est pas disponible?
TextView
héritant de
View
, il n'y a pas de souci
Donnez votre avis
Utile
+0
plus moins
avec le peu de connaissances en Java que j'ai, oui ça me semble correct, cependant en continuant de chercher, cela pourrait venir de l'endroit où je mets cette portion de code ; apparemment il faut la mettre au sein même du onCreate comme le montre ce code
public class mainactivity extends AppCompatActivity {

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button SuSe = (Button) findViewById(R.id.SuSe);
        SuSe.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Button Clicked 
            }
        });
    }
}

mais j'avoue ne pas "visualiser le fonctionnement" de cette façon de faire (peu de patique Android Studio)
Donnez votre avis
Utile
+0
plus moins
L'attribution d'un OnClickListener peut se faire partout, à condition d'avoir accès au composant graphique associé. Le code que tu montre est correct. N'hésites pas à poster ton code qui pose problème si besoin.

mais j'avoue ne pas "visualiser le fonctionnement" de cette façon de faire (peu de patique Android Studio)
Ce n'est pas bien compliqué. Tu as un objet (ici une TextView) et tu lui attribues un paramètre (ici un OnClickListener) à l'aide d'une méthode (ici setOnClickListener).
Et attention! Android Studio, c'est l'IDE. Quand tu parles du langage, il faut dire Android ;)
Donnez votre avis
Utile
+0
plus moins
Merci pour la précision concernant l'IDE et le langage de programmation, quant au code qui ne fonctionnait pas, c'est une erreur de ma part, j'avais oublié de récupérer ma textView au sein d'une variable grâce à findViewById ; cependant en plaçant cette portion de code directement dans le onCreate, le contexte change et donc erreur Cannot resolve constructor Intent voici le code en question :

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_temperature__high);
        String message = getIntent().getStringExtra("temperature_high_question");
        TextView textView = (TextView) findViewById(R.id.Textview_temperature_high_Question);
        textView.setText(message);
        TextView textView1 = (TextView) findViewById(R.id.Textview_temperature_high_PC_Consol_Use);
        textView1.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
//erreur sur le this
                Intent asking_if_time = new Intent(this, Asking_If_Time.class);
                startActivity(asking_if_time);
            }
        });

    }
Donnez votre avis
Utile
+0
plus moins
Je te remercie pour toutes les informations en plus des réponses à mes nombreuses interrogations, ça m'aide grandement
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !