web-dev-qa-db-fra.com

Erreur due à une combinaison non valide de Toast et OnClickListener

J'essaie d'utiliser Toast dans OnCLickListener. Mon code déclenche l'erreur suivante:

The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (new View.OnClickListener(){}, String, int)

Voici mon code:

    Button register = (Button) findViewById(R.id.register);
    register.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            EditText name = (EditText)findViewById(R.id.name);
            String Lname = name.getText().toString();

            Toast.makeText(this, Lname, Toast.LENGTH_SHORT).show();



        }
    });
35
Harsha M V

Comme l'a dit The Kenny, this fait référence au View.OnClickListener au lieu de votre Activity. Changez ceci en MyActivity.this.

Par exemple,

public class MyActivity extends Activity {
// ... other code here
Toast.makeText(MyActivity.this, Lname, Toast.LENGTH_SHORT).show();
94
Computerish

Dans ce cas, this fait référence à l'instance de la sous-classe anonyme de View.OnClickListener. Vous devez vous référer au this de la classe où vous créez la classe anonyme.

7
jsadfeew

Utilisation MyActivity.this comme this fait référence à votre onclickListener.

4
Mr.India

Vous pouvez également utiliser getApplicationContext(). Voir documentation .

3
Jock Mahon

N'importe où, utilisez simplement les éléments suivants:

((Activity) mContext).runOnUiThread(new Runnable() {
                    public void run() {
                        Toast my_toast = Toast.makeText(mContext, "YOUR TEXT OR STRING", Toast.LENGTH_LONG);
                        my_toast.setGravity(Gravity.CENTER, 0, 0);
                        my_toast.show();
                    }
                });

Il vous suffit de définir en haut de votre activité (juste après le onCreate):

mContext = this;

Aussi, voyez que je l'ai décomposé un peu pour pouvoir gérer la gravité comme je veux (parfois vous voudrez peut-être que le toast apparaisse au centre de l'écran) ...

2
Hubert

Une autre approche pour atteindre votre objectif consiste à implémenter l'interface OnClickListener. De cette façon, vous implémentez la méthode onClick() dans votre Activity et vous pouvez ainsi affecter this. De plus, vous pouvez affecter this à plusieurs Buttons. Vous pouvez distinguer ces Button les uns des autres en comparant leurs ID via une instruction if, respectivement switch appropriée dans la méthode onClick().

public class MyActivity extends Activity implements OnClickListener{

    // ...

    protected void onCreate (Bundle savedInstanceState){
        // ...
        Button register = (Button) findViewById(R.id.register);
        register.setOnClickListener(this); 
    }

    public void onClick(View arg0) {
        EditText name = (EditText) findViewById(R.id.name);
        String text = name.getText().toString();

        Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
    }
}
1
Jock Mahon

essaye ça

 public void onClick(View arg0) {
        EditText name = (EditText)findViewById(R.id.name);
        String Lname = name.getText().toString();
        Toast.makeText(arg0.getContext(), Lname, Toast.LENGTH_SHORT).show();
    }
0
A.G.THAMAYS