event - OnClickListener de Android ImageView no funciona
imageview click listener android (11)
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.
Lo siguiente es mi declaración de importación:
import android.view.View.OnClickListener;
El siguiente es mi código de diseño para 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" />
El siguiente es 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 qué 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 deberías agregar esto:
imgFavorite.setClickable(true);
Agregue 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 ( haga clic en Evento (Ver v) ), ¡y eso es todo! Usted puede ver el registro y el texto tostado también.
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();
}
Bueno, mi solución fue otra, o digamos, el error fue:
Simplemente tuve otra vista de imagen con el mismo ID en otro diseño xml <included />
dos veces, que se encontró antes del que quería reaccionar al hacer clic. Solución: Dale a uno de ellos otra identificación ...
De acuerdo,
Me las arreglé para resolver este problema difícil. La cosa era como si estuviera usando FrameLayout
. No sé por qué, pero se me ocurrió que tal vez el ícono se ocultaría detrás de otra vista.
Intenté colocar el icono al final de mi diseño y ahora puedo ver el Toast
y el Log
.
Gracias a todos por tomarse el tiempo para resolver el problema. Seguramente fue complicado.
Definí un OnClickListener para ImageView como un OnClickListener para un botón y parece estar funcionando 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());
}
}
});
En realidad acabo de usar imgView.bringToFront();
y ayudó.
Intente pasar el contexto en lugar del contexto de la aplicación (también puede agregar una declaración de registro para verificar 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();
}
});
Lo mismo me está pasando a mí.
El motivo es: he utilizado una vista de lista con margen superior, por lo que los datos comienzan desde la parte inferior de la imagen, pero la vista de lista real se superpone en la imagen que no es visible. Así que incluso si hacemos clic en la imagen, la acción no se realiza. Para solucionar este problema, he hecho que la vista de lista comience desde la imagen de abajo para que no se superponga en la imagen en sí.
Para que las clases internas pasen la referencia de actividad, normalmente creo una referencia de actividad en onCreate () y la hago como miembro. Como las clases internas tienen acceso a los miembros de la clase principal, puede obtener 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.
Tuve el mismo problema, gracias por el consejo Framelayout! Estaba usando dos imágenes superpuestas en un framelayout (la de arriba era una máscara alfa, para dar el efecto de bordes suaves)
Configuré el xml android:clickable="true"
para la imagen que quería lanzar onClickListener, y android:clickable="false"
para la máscara alfa.
Verifique si otra vista tiene la propiedad match_parent
o fill_parent
, esas propiedades pueden cubrir su ImageView
que se muestra en su RelativeLayout
. Por cierto, la respuesta aceptada no funciona en mi caso.