71 votes

onClick non déclenché sur LinearLayout avec enfant

J'ai un LinearLayout personnalisé avec un enfant TextView plus petit. J'aimerais pouvoir cliquer sur la zone non couverte par TextView, j'ai donc défini clickable=true et un onclicklistener sur LinearLayout, mais onClick n'est pas déclenché. Si je définis l'écouteur onclick sur le TextView, cela fonctionne comme prévu ...

Quelqu'un peut-il aider?

article_ar.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ar_item" android:layout_width="202dp"
    android:layout_height="62dp" android:background="@drawable/bg_item_ar"
    android:clickable="true">

    <TextView android:id="@+id/ar_item_txt"
        android:layout_width="164dp" android:layout_height="fill_parent"
        android:paddingBottom="8dp" android:paddingLeft="8dp"
        android:paddingTop="8dp" android:paddingRight="6dp" android:gravity="center"
        android:background="#50000000" />

</LinearLayout>

Mon LinearLayout personnalisé

 public class ARView extends LinearLayout
{    

    public ARView(final Context context, String name, String id)
    {        
        super(context);  
        getLayoutInflater().inflate(R.layout.ar_item, this ,true);
        LayoutInflater inflater = (LayoutInflater)   getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        inflater.inflate(R.layout.ar_item, null);

        TextView textView = (TextView) findViewById(R.id.ar_item_txt);
        textView.setText(name);

        setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {                   
                Toast t = Toast.makeText(context, "hey!", Toast.LENGTH_SHORT);
                t.show();
            }
        });
    }
}

117voto

Yurets Points 2904

android:duplicateParentState="true" ne m'a pas aidé.

Pour rendre votre mise en page cliquable avec ses enfants, vous devez ajouter cette option pour chaque enfant :

  android:clickable="false"

Ensuite, la gestion des clics ira jusqu'au parent .

66voto

blackbelt Points 45840

pour chaque enfant

android:duplicateParentState="true"

24voto

elementstyle Points 595

Ce n'est pas votre cas, mais j'ai eu un problème similaire avec ViewGroup cliquable. Après une heure de recherche de solution, j'ai découvert que j'avais défini android:inputType sur TextView dans mon ViewGroup qui bloquait onClick() auditeur (non idée pourquoi)

N'utilisez pas android:inputType avec TextView

10voto

Faites de votre parent LinearLayout android:clickable="true"

Faire tous les android de childview :clickable="false"

Sous Linearlayout - Supprimer android:inputType="" de TextView

5voto

nhoxbypass Points 3483

Le android:duplicateParentState="true" donné l' impression que mon TextView est désactivé et ne peut pas recevoir d'événement de clic.

Tout ce dont vous avez besoin est de définir le TextView clickable="false" . Ainsi, l'événement de clic sera envoyé à la mise en page parente et le TextView peut toujours réagir à l'événement tactile (avec effet d'entraînement).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X