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();
}
});
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();
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.
Utilisation MyActivity.this
comme this
fait référence à votre onclickListener
.
Vous pouvez également utiliser getApplicationContext()
. Voir documentation .
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) ...
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 Button
s. 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();
}
}
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();
}