Question

Je suis en train d'utiliser Toast à l'intérieur 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)

Ceci est 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();



        }
    });
Était-ce utile?

La solution

Le Kenny a dit, this est à la View.OnClickListener référait au lieu de votre Activity. Modifier ce, à MyActivity.this.

Par exemple,

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

Autres conseils

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

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

Vous pouvez utiliser getApplicationContext() aussi bien. Consultez la documentation .

Partout, il suffit d'utiliser 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;

En outre, voir que je décompose un peu pour être capable de gérer la gravité que je veux (parfois, vous voudrez peut-être le toast à apparaître au centre de l'écran) ...

Une autre approche pour atteindre votre objectif est de mettre en œuvre l'interface OnClickListener. De cette façon, vous mettre en œuvre la méthode onClick() dans votre Activity et vous pourriez ainsi assign this. De plus, vous pouvez assigner this à plusieurs Buttons. Vous pouvez distinguer ces Buttons les uns des autres en comparant leurs numéros d'identification via une déclaration if appropriée, respectivement switch dans la méthode de 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();
    }
}

essayer cette

 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();
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top