onClick () confusión de eventos con el parámetro

Tengo una vista que tiene una propiedad onClick :

 <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="hey" android:onClick="showCity" /> 

Lo que corresponde a este método:

 public void showCity(View view) { Intent intent = new Intent(this, CityActivity.class); startActivity(intent); } 

Sin embargo, tengo un elemento de menú que quiero tener abierto el CityActivity también:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_city: showCity(); return true; default: return super.onOptionsItemSelected(item); } } 

Sin embargo, esto no funciona porque falta el parámetro de view en la llamada a showCity() y no estoy seguro de lo que debería ser en este caso.

¿Cómo puedo modificarlo para que funcione en ambos casos?

Reemplace su código onOptionsItemSelected con el siguiente código siguiente:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_city: showCity(null); return true; default: return super.onOptionsItemSelected(item); } } 

showCity debe tener el parámetro View lugar de que puede pasar null como parámetro a su método onClick() .

Puesto que usted no utiliza el parámetro de la view , usted puede apenas pasar null a él y él trabajará

Simplemente pasar null es decir showCity(null)

Escriba un atributo id en su textview en xml como se muestra a continuación, también puede eliminar el atributo onClick de TextView:

 <TextView android:id="@+id/tShowCity" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="hey" /> 

Ahora en su método onCreate () de la actividad inicie su TextView como se muestra a continuación y escriba el oyente de clic para el TextView como se muestra a continuación:

 TextView tv = (TextView)findViewById(R.id.tShowCity); tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showCity(); } }); 

ahora defina su método de city show como se muestra a continuación:

 public void showCity() { Intent intent = new Intent(this, CityActivity.class); startActivity(intent); } 

Ahora el método anterior también se puede utilizar en su menú y funcionará sin ningún problema como:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_city: showCity(); return true; default: return super.onOptionsItemSelected(item); } } 

Si no está usando la vista, ¿por qué agrega el parámetro de método …
public void showCity (Ver vista) {Intención intención = nueva Intención (esto, CityActivity.class); StartActivity (intención); }

Mira…

 public void showCity() { Intent intent = new Intent(this, CityActivity.class); startActivity(intent); } 

Sencillo….. 🙂

Si no desea utilizar la propiedad View ..a respuesta ya puede pasar valor null a su showCity ()

 showCity(null); 

Pero si desea utilizar propiedades de vista específicas en su showCity() puede pasar vista a con id por findViewById() método .. como.

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_settings: showCity(this.findViewById(R.id.textview1)); return true; default: return super.onOptionsItemSelected(item); } } 
  • Cómo obtener una lista de aplicaciones Android instaladas y elegir una para ejecutar
  • Uso de Phonegap para enviar SMS y mostrar en Bandeja de entrada
  • Cómo hacer una intención con múltiples acciones
  • Error ERROR_RECOGNIZER_BUSY con reconocimiento de voz sin conexión
  • Compruebe la acción del usuario en Intent.ACTION_VIEW
  • OnActivityResult no se llama a un dispositivo Android, sino que está en otro
  • Cómo decidir de qué actividad venimos?
  • Se muestra una pantalla blanca mientras se cambia entre Actividades
  • Intent.ACTION_CALL inicia una llamada skype en lugar de una llamada telefónica "normal"
  • Qué intención para la configuración - Uso de datos
  • Android Intent No se puede resolver el constructor
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.