web-dev-qa-db-fra.com

Comment définir ListView non cliquable

J'ai cette ListView qui n'a besoin que d'afficher des données.
Donc, je ne veux pas le rendre cliquable. 
J'ai d’abord essayé de changer la liste XML en:

<ListView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentLeft="true"
        Android:layout_alignParentTop="true"
        Android:clickable="false" >

Mais ça n'a pas marché.
Donc, pour résoudre mon problème, j’ai défini par le code:

  list.setSelector(Android.R.color.transparent); 

mais je ne peux pas croire qu'il n'y a pas de meilleure solution. Une idée?

32
Antonio Calì

La voici après le commentaire:

Une façon de le faire est: ListView.setOnClickListener(null); OU

Vous pouvez ajouter Android:focusable="false"Android:focusableInTouchMode="false" OU

d'une autre manière dans la mise en page Android:listSelector="@Android:color/transparent"

À votre santé.

52
g00dy

Remplacez simplement isEnabled (position) dans votre adaptateur et renvoyez false

@Override
public boolean isEnabled(int position) {
    return false;
}
51
Arun C

remplacer la méthode ci-dessous. Retourne false pour dire que tous les éléments ne sont pas cliquables.

 @override
  public boolean areAllItemsEnabled() {
    return false;
  }

Et substituez la méthode ci-dessous pour retourner quel élément n'est pas cliquable

public boolean isEnabled(int position) {
    if(position == your_item_pos) {
          return false;
    }
    return true;
}
12
Sunil Kumar
Android:listSelector="@Android:color/transparent"

cela change la couleur sur laquelle vous avez cliqué comme si vous ne l'avez pas cliqué!.

4
Shivendra

Copiez simplement cette méthode dans votre classe d’adaptateur . Rien à faire .........

@Override
public boolean isEnabled(int position) {

    return false;
}

Vous pouvez définir n'importe quelle condition pour rendre certains éléments sélectionnés non cliquables.

@Override
public boolean isEnabled(int position) {
    //Y for non clickable item
      if(data_list.get(position).equalsIgnoreCase("Y"))
        {
            return false;
        }
    return true;
}
2
Ashish Saini

Moyen facile:

listView.setSelector(Android.R.color.transparent);
1
Andrey

Vous pourriez utiliser

yourListView.setOnItemClickListener(null);
1
smartmouse
Android:focusable="true"

à l'un des éléments dans listview maintenant listview ne sera pas cliquable

1
Bald bcs of IT

J'ai ce ListView qui a juste besoin d'afficher des données. Donc, je ne veux pas le rendre cliquable.

Je l'ai fait dans l'un de mes projets, et l'exemple ci-dessous fonctionne bien.

En gros, vous avez juste besoin de:

  • une source de données (ArrayList, par exemple)
  • un widget ListView
  • un ArrayAdapter, afin de lier la source de données avec ListView


MainActivity.Java

package com.sample.listview;

import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;

import Android.widget.ArrayAdapter;
import Android.widget.ListView;

    public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         // data source
         String[] arrayData = {"Debian", "Ubuntu", "Kali", "Mint"};

         // ListView Widget from a Layout
         ListView listView = (ListView) findViewById(R.id.mainListView);

         // an ArrayAdapter (using a layout as model for displaying the array items)
         ArrayAdapter aa = new ArrayAdapter<String>(this, R.layout.main_list_item_layout, arrayData);

         // binding the ArrayAdapter with the ListView Widget
         listView.setAdapter(aa);
    }
}


activity_main.xml
---> Assurez-vous que le widget ListView utilise wrap_content pour layout_width et layout_height

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.sample.listview.MainActivity">


    <ListView
        Android:id="@+id/mainListView"
        Android:layout_width="wrap_content"  <---- HERE
        Android:layout_height="wrap_content" <---- HERE
        />

</LinearLayout>


main_list_item_layout.xml  

<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/mainListItem"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:textColor="#ff0000"
    Android:textSize="20sp"
    >

</TextView>



C'est tout: Un ListView non cliquable, il suffit de présenter des données à l'écran.

0
ivanleoncz

Il suffit de définir Android: enabled = "false" dans la liste et cela ferait l'affaire ... pourquoi, pour ne pas surcharger, continuer à ignorer les méthodes .. 

0
AndroidMech

Essayez ce code 

Dans Adapter.getView ()

i.setOnClickListener( null );
i.setLongClickable( false );
i.setClickable( false );
0
Developer

En fait, @ Override isEnabled () et SetOnClickListener (null) SetClickable (false) SetLongClickable (false) Ils ne fonctionnent pas pour moi . Je le résous par remplacer performItemClick

@Override
public boolean performItemClick(View view, int position, long id) {
 if(!clickAble){
     return false;
 }
    return super.performItemClick(view,position,id);
}
0
coney