web-dev-qa-db-fra.com

Comment désactiver en cliquant sur ListView dans Android?

J'ai un ListView que je remplis avec les valeurs de ma base de données. Si la base de données est vide, je règle le premier élément de ListView sur "Aucune donnée". Je veux désactiver en cliquant sur cet élément. J'ai utilisé ArrayAdapter. J'ai essayé de créer areAllItemsEnabled, isEnabled false, mais cela ne servait à rien. Même si je règle isClickable et setEnabled de ListView sur false, cela ne sert à rien. Et je mets le code pour OnItemClickListener dans la condition else, même si cela n'empêche pas l'élément de liste d'être cliquable. Est-ce que quelqu'un a une solution alternative? Merci!

30
user1625971

Dans votre ArrayAdapter personnalisé, utilisez la fonction isEnabled pour renvoyer false:

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

travaille toujours pour moi.

89
yahya

tout le plus facile! list.setEnabled (false)

14
Master

Vous pouvez définir la vue vide comme indiqué et elle sera traitée automatiquement:

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
         Android:orientation="vertical"
         Android:layout_width="match_parent"
         Android:layout_height="match_parent"
         Android:paddingLeft="8dp"
         Android:paddingRight="8dp">

     <ListView Android:id="@Android:id/list"
               Android:layout_width="match_parent"
               Android:layout_height="match_parent"
               Android:background="#00FF00"
               Android:layout_weight="1"
               Android:drawSelectorOnTop="false"/>

     <TextView Android:id="@Android:id/empty"
               Android:layout_width="match_parent"
               Android:layout_height="match_parent"
               Android:background="#FF0000"
               Android:text="No data"/>
 </LinearLayout>
9

créez un adaptateur pour cette liste, et remplacez cette méthode

public boolean isEnabled(int position);

puis retournez false lorsque vous souhaitez désactiver le clic

2
Ben

Essayez de définir ces deux attributs sur le ListView:

Android:listSelector="@Android:color/transparent" 
Android:cacheColorHint="@Android:color/transparent"
0
Nick Wright

J'ai fait comme ça selon mes besoins j'espère que cela peut vous aider

@Override

public boolean isEnabled(int position) {
        if(data.get(position).isClickable==false)
        {
            return false;
        }
        return super.isEnabled(position);
    }
0
DropAndTrap

Peut-être pourriez-vous utiliser une instruction if pour vérifier le contenu de l'entrée listview dans OnClick, si elle contient 'Aucune donnée'

0
Broak