Así, mi problema es que OnClickListener no funciona cuando pongo android:clickable="true" en mi clase.

Este es MyClass código xml:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:clickable="true">
...
...
</RelativeLayout>

MyClass.java:

public class MyClass extends RelativeLayout implements OnClickListener {
    public MyClass(Context context) {
        super(context);

        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.book_item, this);
        setOnClickListener(this);
    }

    public void onClick(View v) {
        Log.v("TAG", "Hello");
    }
...
...
}

Funciona bien cuando me puse android:clickable a false. ¿Qué hago mal?

OriginalEl autor Scit | 2011-08-07

4 Comentarios

  1. 19

    Configuración de un OnClickListener se establece automáticamente al hacer clic propiedad en true. El código que se muestra es confusa. Mi entendimiento es que su MyClass punto de vista es el padre de la RelativeLayout se muestra en el archivo XML.

    Si es así, el niño RelativeLayout obtendrá el toque eventos de primera (ya que se puede hacer clic) pero no va a hacer nada con ellos ya que no tienen un clic en el oyente.

    Acaba de quitar clickable=true de su XML.

    onClickListener funciona bien sin clickable=true, pero selector en android:background="@drawable/background" deja de trabajar (no se muestran pulsando estado)
    Establecer el estado y la escucha de la opinión de que debe ser seleccionables. Se están mezclando los estados en diferentes puntos de vista.
    Configuración de onClickListenner en Android 2.3 no establece automáticamente puede hacer clic en true.

    OriginalEl autor Romain Guy

  2. 8

    al hacer esto: android:clickable="true" de deshabilitar el onClickListener (no es lógico pero es como que..).

    De modo conjunto a "false" o simplemente eliminar esta línea del archivo XML 😉

    OriginalEl autor eento

  3. 5

    Agregar id a su disposición:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/yourId"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:clickable="true">
    </RelativeLayout>

    A continuación, en el código java:

    public class MyClass extends RelativeLayout implements OnClickListener {
        public MyClass(Context context) {
            super(context);
    
            LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            inflater.inflate(R.layout.book_item, this);
            findViewById(R.id.yourId).setOnClickListener(this);
        }
    
        public void onClick(View v) {
            Log.v("TAG", "Hello");
        }
    ...
    ...
    }

    OriginalEl autor servus-libertatem

  4. 1
     ((RelativeLayout)findViewById(R.id.yourId)).setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                    //code area ...
                    Log.v("TAG", "Hello");
    
                    return true;
                } else{
                    return false;
                }
            }
        });

    Puede utilizar de esta manera también.

    OriginalEl autor Ercan PINAR

Dejar respuesta

Please enter your comment!
Please enter your name here