OnClickListener de Android ImageView no funciona

Tengo un ImageView para el que quería implementar el onClickListener. Pero cuando hago clic en la imagen, no pasa nada. Evento el Logcat no muestra ningún error.

La siguiente es mi declaración de importación:

import android.view.View.OnClickListener; 

A continuación se muestra el código de diseño de la imagen:

 <ImageView android:id="@+id/favorite_icon" android:src="@drawable/small_star" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|right" android:paddingTop="63sp" android:paddingRight="2sp" /> 

A continuación se muestra el código en mi actividad que define el controlador de eventos para onClickListener:

 ImageView imgFavorite = (ImageView) findViewById(R.id.favorite_icon); imgFavorite.setClickable(true); imgFavorite.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.i(SystemSettings.APP_TAG + " : " + HomeActivity.class.getName(), "Entered onClick method"); Toast.makeText(v.getContext(), "The favorite list would appear on clicking this icon", Toast.LENGTH_LONG).show(); } }); 

Me estoy perdiendo de algo. Cualquier ayuda sería apreciada.

Gracias por adelantado.

Puedes probar esto y decirme lo que pasa ?? :

 ImageView imgFavorite = (ImageView) findViewById(R.id.favorite_icon); imgFavorite.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(YourActivityName.this, "The favorite list would appear on clicking this icon", Toast.LENGTH_LONG).show(); } }); 

O usted debe agregar esto:

 imgFavorite.setClickable(true); 

De acuerdo,

Me las arreglé para solucionar este problema difícil. La cosa era como si estuviera usando FrameLayout . No sé por qué, pero me vino a la mente que puede ser el icono se estaría ocultando detrás de alguna otra vista.

He intentado poner el icono al final de mi diseño y ahora puedo ver el Toast , así como el Log .

Gracias a todos por tomarse el tiempo para resolver el problema .. Fue sin duda difícil.

Intente pasar el contexto en lugar del contexto de la aplicación (también puede agregar una sentencia de registro para comprobar si el método onClick se ejecuta alguna vez):

 imgFavorite.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.d("== My activity ===","OnClick is called"); Toast.makeText(v.getContext(), // <- Line changed "The favorite list would appear on clicking this icon", Toast.LENGTH_LONG).show(); } }); 

Bueno, mi solución fue otra, o digamos, el error fue:

Simplemente tuve otra imagen con el mismo id en otro <included /> includes <included /> dos veces encapsuled xml layout, que se encontró antes de la que quería reaccionar en el clic. Solución: Dé a uno de ellos otra identificación …

Tenía el mismo problema, gracias por la punta de Framelayout! Yo estaba usando dos imágenes superpuestas en un framelayout (el que en la parte superior era una máscara alfa, para dar el efecto de bordes suaves)

Me puse en el xml android:clickable="true" para la imagen que quería lanzar el onClickListener, y android:clickable="false" a la máscara alfa.

Añadir android: onClick = "clickEvent" a su vista de imagen.

 <ImageView android:id="@+id/favorite_icon" android:src="@drawable/small_star" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|right" android:paddingTop="63sp" android:paddingRight="2sp" android:onClick="clickEvent" /> 

En su actividad puede crear un método con el mismo nombre ( clickEvent (View v) ), y eso es todo! También puede ver el registro y el texto de brindis.

 public void clickEvent(View v) { Log.i(SystemSettings.APP_TAG + " : " + HomeActivity.class.getName(), "Entered onClick method"); Toast.makeText(v.getContext(), "The favorite list would appear on clicking this icon", Toast.LENGTH_LONG).show(); } 

En realidad acabo de usar imgView.bringToFront(); Y ayudó.

Para que las clases internas pasen la referencia de actividad, suelo crear una referencia de actividad en onCreate () y hacerla como miembro. Como las clases internas tienen acceso a los miembros de la clase de los padres que usted puede obtener de su actividad y por lo tanto su contexto:

 class MyClass extends Activity{ private Activity thisActivity; @Override protected void onCreate(Bundle savedInstanceState) { thisActivity = this; } } 

Espero que ayude.

Definí un OnClickListener para ImageView como OnClickListener para un botón y él parece estar trabajando muy bien. Esto es lo que tenía. Por favor, intente y háganos saber si no funciona.

 final ImageView imageview1 = (ImageView) findViewById(R.id.imageView1); imageview1.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { try { Log.i("MyTag","Image button is pressed, visible in LogCat");; } catch (Exception e) { Log.e(TAG, e.toString()); } } }); 

Compruebe si otra vista tiene la propiedad match_parent o fill_parent , esas propiedades pueden cubrir su ImageView que se ha mostrado en su RelativeLayout . Por el camino, la respuesta aceptada no funciona en mi caso.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.