Erreur en raison de la combinaison non valide de Toast et OnClickListener
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();
}
});
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
.
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 Button
s. Vous pouvez distinguer ces Button
s 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();
}