OnClick sur textview

Résolu/Fermé
Debutant en webmastering Messages postés 401 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2021 - Modifié le 1 juin 2017 à 17:06
Debutant en webmastering Messages postés 401 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2021 - 2 juin 2017 à 17:38
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 ?



Cordialement,  Debutant en webmastering
A voir également:

6 réponses

BunoCS Messages postés 15495 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 octobre 2024 3 909
Modifié le 2 juin 2017 à 13:58
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...
1
BunoCS Messages postés 15495 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 octobre 2024 3 909
1 juin 2017 à 18:00
Hello,

Pourquoi dis-tu qu'elle n'est pas disponible?
TextView
héritant de
View
, il n'y a pas de souci
0
Debutant en webmastering Messages postés 401 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2021
1 juin 2017 à 19:10
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)
0
BunoCS Messages postés 15495 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 octobre 2024 3 909
2 juin 2017 à 09:26
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 ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Debutant en webmastering Messages postés 401 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2021
2 juin 2017 à 13:18
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);
            }
        });

    }
0
Debutant en webmastering Messages postés 401 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 27 janvier 2021
2 juin 2017 à 17:38
Je te remercie pour toutes les informations en plus des réponses à mes nombreuses interrogations, ça m'aide grandement
0