Error debido a la combinación no válida de Toast y OnClickListener

Estoy tratando de usar Toast dentro de OnCLickListener . Mi código activa el siguiente error:

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

Este es mi código:

  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(); } }); 

7 Solutions collect form web for “Error debido a la combinación no válida de Toast y OnClickListener”

Como dijo el Kenny, this se View.OnClickListener al View.OnClickListener lugar de su Activity . Cambiar esto, a MyActivity.this .

Por ejemplo,

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

En este caso, se refiere a la instancia de la subclase anónima de View.OnClickListener . Tienes que referirte a this de la clase donde creas la clase anónima.

Use MyActivity.this ya que this refiere a su onclickListener .

También puede utilizar getApplicationContext() . Consulte la documentación .

En cualquier lugar, sólo tiene que utilizar lo siguiente:

 ((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(); } }); 

Sólo tiene que definir en la parte superior de su actividad (justo después de la onCreate):

 mContext = this; 

También, vea que lo descompongo un poco para poder manejar la gravedad como quiero (a veces es posible que desee que el brindis aparezca en el centro de la pantalla) …

Otro enfoque para lograr su objetivo es implementar la interfaz OnClickListener . De esta manera se implementa el método onClick() en su Activity y, por tanto, se puede asignar this . Además, puede asignar this a varios Button . Puede distinguir estos Button entre sí comparando sus ID a través de una instrucción if , respectivamente switch apropiada dentro del método 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(); } } 

prueba esto

  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(); } 
  • Cómo hacer un mensaje tostado cuando se hace clic en el botón
  • ¿Es posible esperar hasta que un brindis haya terminado de reanudar el método?
  • ¿Cuál es el valor de Toast.LENGTH_LONG y Toast.LENGTH_SHORT?
  • Cómo utilizar Tostadas cuando no puedo usar "esto" como contexto
  • Android: Notificación personalizada de brindis hereda toast predeterminado
  • ¿Por qué son los mensajes emergentes de Android llamados brindis?
  • Eliminar "Gracias. Su artículo aparecerá en breve. "Tostada de aparecer después de la compra de InApp
  • Detener una tostada y empezar otra en android
  • Cómo mostrar un mensaje Toast desde una clase que no se extiende Actividad
  • Java.lang.RuntimeException: No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare ();
  • Comparando dos veces en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.