Pregunta

¿Cómo hago una imagen que se pueda hacer clic? He intentado algunas maneras, pero sin éxito. Aquí está el último código que probé (se puede hacer clic pero recibe un error):

    ImageView btnNew = (ImageView) findViewById(R.id.newbutton);
    btnNew.setOnClickListener(new View.OnClickListener() {

          @Override
          public void onClick(View v) {

            // do stuff
          }

        });      

Y aquí está la parte de XML:

    <ImageView 
    android:src="@drawable/tbnewbutton" 
    android:text="@string/hello"
    android:layout_width="wrap_content"
    android:layout_alignParentRight="true"
    android:id="@+id/newbutton"
    android:clickable="true"
    android:onClick="clickImage"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true" />

Al ejecutar este código y hacer clic en la imagen, recibo este error:

01-24 19: 14: 09.534: Error/AndroidRuntime (1461): java.lang.illegalstateException: no pudo encontrar un método clickimage (ver) en la actividad

Aquí está la solución:

El XML:

    <ImageButton
    android:src="@drawable/tbnewbutton" 
    android:text="@string/hello"
    android:layout_width="wrap_content"
    android:layout_alignParentRight="true"
    android:id="@+id/newbutton"
    android:clickable="true"
    android:onClick="clickNew"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:background="@null" />

El código :

    public void clickNew(View v)
{
    Toast.makeText(this, "Show some text on the screen.", Toast.LENGTH_LONG).show();
}
¿Fue útil?

Solución

Como otros dijeron: Haz esto un ImageButton y definir su atributo OnClick

<ImageButton
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:layout_gravity="left"
     android:onClick="scrollToTop"
     android:src="@drawable/to_top_button"
/>

La imagen está aquí codificada en un archivo res/drawable/to_top_button.png. Si el usuario hace clic en el botón, el método scrollToTop() se llama. Este método debe declararse en la clase que establece el diseño con el ImageButton como su diseño de contenido.

public void scrollToTop(View v) {
    ...
}

Definir el controlador OnClick de esta manera le ahorra mucha escritura y también evita la necesidad de clases internas anónimas, lo cual es beneficioso para la huella de la memoria.

Otros consejos

Hace un ImageButton ¿Haz lo que quieras?

El mensaje de error que recibe implica que no tiene un método en su actividad que coincida con su controlador OnClick.

Deberías tener algo como clickImage(View view) en su actividad con la implementación de manejo de clics.

Utilizar una ImageButton ;)

Ha establecido el método OnClick para llamar a "ClickImage" cuando se hace clic en la imagen en su XML, pero no ha creado un método de ClickImage en su código. No deberías necesitar establecer el oyente OnClick en absoluto. Simplemente implemente el método de su XML y debe estar configurado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top