J’ai donc fait des recherches et après vous avoir défini le bouton comme object par le code
private Button buttonname; buttonname = (Button) findViewById(R.id.buttonnameinandroid) ;
voici mon problème
buttonname.setOnClickListener(this); //as I understand it, the "**this**" denotes the current `view(focus)` in the android program
alors votre événement OnClick()
…
Problème:
Quand je tape le “ceci”, il dit:
setOnClickListener (Android.View.view.OnClickListener) in View cannot be applied to (com.helloandroidstudio.MainActivity)
Je ne sais pas pourquoi?
voici le code du fichier .java
import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends ActionBarActivity { private Button btnClick; private EditText Name, Date; private TextView msg, NameOut, DateOut; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnClick = (Button) findViewById(R.id.button) ; btnClick.setOnClickListener(this); Name = (EditText) findViewById(R.id.textenter) ; Date = (EditText) findViewById(R.id.editText) ; msg = (TextView) findViewById(R.id.txtviewOut) ; NameOut = (TextView) findViewById(R.id.txtoutName) ; DateOut = (TextView) findViewById(R.id.txtOutDate) ; if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()) .commit(); } } public void onClick(View v) { if (v == btnClick) { if (Name.equals("") == false && Date.equals("") == false) { NameOut = Name; DateOut = Date; msg.setVisibility(View.VISIBLE); } else { msg.setText("Please complete both fields"); msg.setVisibility(View.VISIBLE); } } return; }
SetOnClickListener (Android.View.view.OnClickListener) dans View ne peut pas être appliqué à (com.helloandroidstudio.MainActivity)
Cela signifie en d’autres termes (en raison de votre scénario actuel) que votre MainActivity doit implémenter OnClickListener :
public class Main extends ActionBarActivity implements View.OnClickListener { // do your stuff }
Ce:
buttonname.setOnClickListener(this);
signifie que vous voulez affecter un écouteur à votre bouton “sur cette instance” ->
cette instance représente OnClickListener et pour cette raison, votre classe doit implémenter cette interface.
C’est similaire à la classe d’écoute anonyme (que vous pouvez également utiliser):
buttonname.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } });
package com.mani.smsdetect; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends Activity implements View.OnClickListener { //Declaration Button Button btnClickMe; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Intialization Button btnClickMe = (Button) findViewById(R.id.btnClickMe); btnClickMe.setOnClickListener(MainActivity.this); //Here MainActivity.this is a Current Class Reference (context) } @Override public void onClick(View v) { //Your Logic } }
Button button= (Button)findViewById(R.id.buttonId); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { // click handling code } });
Lorsque vous définissez un OnClickListener
(ou tout écouteur) de cette façon
btnClick.setOnClickListener(this);
vous devez implement
OnClickListener
dans votre Activity
.
public class MainActivity extends ActionBarActivity implements OnClickListener{
public class MainActivity extends AppCompatActivity implements View.OnClickListener
Chaque fois que vous utilisez (ceci) sur des événements de clic, votre activité principale doit implémenter ocClickListener. Android Studio le fait pour vous, appuyez sur alt + enter sur le mot ‘this’.
// si je comprends bien, le “ceci” indique la vue actuelle (focus) dans le programme Android
Non, “this” ne fonctionnera que si votre MainActivity
référencé par this
implémente View.OnClickListener
, qui est le type de paramètre de la méthode setOnClickListener()
. Cela signifie que vous devez implémenter View.OnClickListener
dans MainActivity
.
package com.mani.helloworldapplication; import android.app.Activity; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity implements View.OnClickListener { //Declaration TextView tvName; Button btnShow; @Override protected void onCreate(Bundle savedInstanceState) { //Empty Window super.onCreate(savedInstanceState); //Load XML File setContentView(R.layout.activity_main); //Intilization tvName = (TextView) findViewById(R.id.tvName); btnShow = (Button) findViewById(R.id.btnShow); btnShow.setOnClickListener(this); } @Override public void onClick(View v) { Ssortingng name = tvName.getText().toSsortingng(); Toast.makeText(MainActivity.this,name,Toast.LENGTH_SHORT).show(); } }
Démarrez votre OnClickListener, mais lorsque vous arrivez à la première parenthèse, tapez new, puis View et appuyez sur Entrée. Devrait ressembler à ceci quand vous avez terminé:
Button btn1 = (Button)findViewById(R.id.button1); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //your stuff here. } });
public class MainActivity extends Activity { Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.submitButton); button.setOnClickListener(new MyClass()); } public class MyClass implements View.OnClickListener { @Override public void onClick(View v) { } } }
Dans la classe Java Activity, vous devez d’abord utiliser une méthode pour trouver la vue du bouton:
btnSum =(Button)findViewById(R.id.button);
après cet ensemble sur click auditeur
btnSum.setOnClickListener(new View.OnClickListener() {
et remplacer la méthode onClick pour votre fonctionnalité. J’ai trouvé un exemple pleinement fonctionnel ici: http://javainhouse.blogspot.in/2016/01/button-example-android-studio.html
Votre Activity
doit implémenter View.OnClickListener
, comme ceci:
public class MainActivity extends Activity implements View.OnClickListener{ // YOUR CODE }
Et dans MainActivity
remplacez la méthode onClick()
, comme ceci:
@override public void onClick (View view){ //here YOUR Action response to Click Button }
Différentes manières de gérer l’événement du bouton
Button btn1 = (Button)findViewById(R.id.button1); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(context, "Button 1", Toast.LENGTH_LONG).show(); } });
[Consultez cet article pour plus de détails sur les gestionnaires d’événements de boutons]