OnItemClickListener et OnClickListener ne fonctionnent pas pour ListView

J'ai utilisé un Custom ListView et j'explique des données en utilisant le même ListView.

Lorsque je clique sur l'élément Affichage de la liste, onClickListener ne s'appelle pas. Je ne peux pas sélectionner d'élément de liste.

  • Mes arrière-plan de ListView sont noirs pendant le défilement - comment réparer?
  • Qu'est-ce que signifie "Erreur lors de la réception de l'intention de diffusion" [...} "?
  • Rotation et mise à l'échelle en utilisant multi-touch dans Android
  • Comment ajouter une barre de défilement à la disposition relative?
  • La clé api est-elle nécessaire dans l'attestation SafetyNet?
  • Convertir le projet existant en projet Android dans Eclipse?
  • Code de mise en page:

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_marginBottom="16dp" android:background="@drawable/list_selector" android:clickable="true" android:orientation="horizontal" android:padding="5dip" > <LinearLayout android:id="@+id/imgProperty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginRight="5dip" android:padding="3dip" > <ImageView android:id="@+id/list_image" android:layout_width="50dp" android:layout_height="50dp" android:contentDescription="@string/app_name" android:src="@drawable/ic_launcher" android:focusable="false"/> </LinearLayout> <TextView android:id="@+id/tvCity" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="75dip" android:layout_toRightOf="@+id/list_image" android:paddingBottom="10dip" android:text="property" android:textColor="#040404" android:textSize="15sp" android:textStyle="bold" android:typeface="sans" /> <TextView android:id="@+id/tvprice" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/imgProperty" android:layout_alignLeft="@+id/tvCity" android:text="Price" android:focusable="false"/> </RelativeLayout> 

    Code de l'adaptateur:

      public class CustomListAdapter extends BaseAdapter { ArrayList<Propety> PropertiesArray; private LayoutInflater Inflater; public CustomListAdapter(ArrayList<Propety> PropertiesArray) { this.PropertiesArray=PropertiesArray; } @Override public int getCount() { // TODO Auto-generated method stub return PropertiesArray.size(); } @Override public Object getItem(int position) { return PropertiesArray.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, final ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); convertView = inflater.inflate(R.layout.customlistview, parent, false); } final Propety ListArray = PropertiesArray.get(position); TextView tvPropertyName = (TextView) convertView.findViewById(R.id.tvCity); tvPropertyName.setText(ListArray.getName()); TextView tvPrice = (TextView) convertView.findViewById(R.id.tvprice); tvPrice.setText(ListArray.getPrice()); ImageView imgProperty = (ImageView) convertView.findViewById(R.id.list_image); imgProperty.setImageResource(R.drawable.ic_launcher); convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(parent.getContext(), "view clicked: " + ListArray.getName(), Toast.LENGTH_SHORT).show(); } }); return convertView; } } 

    Code ListView:

      ListView propertylistview = (ListView) findViewById(R.id.listview); CustomListAdapter customlistview=new CustomListAdapter(PropertiesArray); propertylistview.setAdapter(customlistview); 

    ListView XML:

      <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/customview" android:layout_marginBottom="10dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="24dp" android:background="@drawable/list_selector" android:textAlignment="center" > 

    Custom.xml:

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <SurfaceView android:id="@+id/surface" android:layout_width="fill_parent" android:layout_height="match_parent" /> <TextView android:id="@+id/txtangle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_marginBottom="115dp" android:layout_marginLeft="95dp" android:text="" /> <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/customview" android:layout_marginBottom="10dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="24dp" android:background="@drawable/list_selector" android:textAlignment="center" > </ListView> <view android:id="@+id/customview" android:layout_width="110dp" android:layout_height="110dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" class="com.example.samplebuapp.CustomCompass" /> <view android:id="@+id/view1" android:layout_width="110dp" android:layout_height="110dp" android:layout_above="@+id/listview" android:layout_alignParentRight="true" android:layout_marginRight="18dp" class="com.example.samplebuapp.CustomView" /> <LinearLayout android:id="@+id/rl1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/listview" android:orientation="vertical" android:focusable="false"> </LinearLayout> </RelativeLayout> 

    Le défilement même ne fonctionne pas.

    Je ne peux pas comprendre pourquoi cela se passe-t-il? Est-ce que je manque quelque chose?

    Toute aide pour résoudre ce problème est appréciée.

  • Comment activer par programme GPS dans Android Cupcake
  • Android JUnit Testing ... Comment attendre une exception
  • Android - Comprendre View.getLocalVisibleRect (Rect)
  • Android Studio 2.1 exécution instantanée java.lang.OutOfMemoryError: limite supérieure de GC dépassée
  • SwitchPreference onChecked / onClick Listener
  • Android / Eclipse / Fin prématurée du fichier xml
  • 8 Solutions collect form web for “OnItemClickListener et OnClickListener ne fonctionnent pas pour ListView”

    Ce qui suit fera le travail dans votre cas.

     ListView propertylistview = (ListView) findViewById(R.id.listview); propertylistview.setOnItemClickListener( myListViewClicked ): OnItemClickListener myListViewClicked = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(YourActivity.this, "Clicked at positon = " + position, Toast.LENGTH_SHORT).show(); } }; 

    N'oubliez pas d'enlever les éléments suivants à partir du CustomAdapter

      convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(parent.getContext(), "view clicked: " + ListArray.getName(), Toast.LENGTH_SHORT).show(); } }); 

    Je suis d'accord avec Ninjia, mais vous devez ajouter ces données au code XML: Vous devez définir sur tous les objets enfants dans la liste des éléments (TextView, ImageView, etc.):

     android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" 

    Et pour l'élément racine RelativeLayout / LinearLayout et donc, définissez:

     android:clickable="false" android:descendantFocusability="blocksDescendants" android:focusable="false" android:focusableInTouchMode="false" 

    Si vous ne définissez pas ceux-ci, ils "attraperont" l'événement de clic. Et si vous disposez d'un adaptateur ListView personnalisé, vérifiez simplement que vous avez remplacé:

     @Override public boolean isEnabled(int position) { return true; } 

    Vérifiez votre liste de rangée une fois:

    La mise en page ou toute vue ne doit pas être `android: clickable =" true "et android: focusable =" true "

    S'il est là, il suffit de supprimer et de lancer l'application à nouveau.

    Le code simple qui a résolu mon problème et la méthode view.setOnClickListener se trouve dans mon adaptateur personnalisé

      view.setFocusable(false) 

    Si les événements tactiles sont interceptés dans la disposition de la cellule, dans la mise en page de votre cellule personnalisée, définissez android:descendantFocusability="blocksDescendants" sur la disposition du niveau supérieur de votre cellule. Pour moi, il était trop pénible d'ajouter des attributs xml à chaque vue individuelle.

    Notez que cela peut également être défini dans le code:

    cell.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);

    J'ai également essayé ceci avec un ListView dans une cellule, et j'ai dû annuler onTouchEvent pour le faire fonctionner:

     public class NoTouchListView extends ListView { @Override public boolean onTouchEvent(MotionEvent ev) { return false; } } 

    Même si j'avais le même problème, j'ai une case à cocher, j'ai fait ce qui suit pour masquer le travail de l'élémentClickListener,

    Ajout des propriétés suivantes à la case à cocher,

     android:focusable="false" android:focusableInTouchMode="false" android:clickable="false" 

    Et ItemClickListner a commencé à fonctionner.

    Pour un exemple détaillé, vous pouvez passer par le lien,

    http://knowledge-cess.com/android-itemclicklistner-with-checkbox-or-radiobutton/

    J'espère que cela vous aidera!

    Pour TextView, vous devez également utiliser

     android:textIsSelectable="false" 

    https://developer.android.com/reference/android/widget/TextView.html#setTextIsElectable

    Vous devriez utiliser ListView.setOnItemClickListener() pour obtenir ce que vous voulez.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.