2011-04-04 3 views
14

donc je le code suivant dans l'adaptateur:android - désactiver l'article Listview cliquez et réactiviez

@Override 
    public boolean isEnabled(int position) 
    { 
     GeneralItem item = super.getItem(position); 
     boolean retVal = true; 


      if (item != null) 
      { 
       if (currSection != some_condition) 
       retVal = !(item.shouldBeDisabled()); 
      } 
     return retVal; 
    } 


    public boolean areAllItemsEnabled() 
    { 
     return false; 
    } 

La question ici: Donc, si je désactivé mon article lors de la liaison initiale, maintenant je Déclenchez l'événement sur l'écran et ont besoin de les activer tous, peu importe quoi. Est-ce que je redéfinis tout après que cette action soit effectuée?

par exemple:

onCreate{ 

// create and bind to adapter 
// this will disable items at certain positions 

} 

onSomeClick{ 

I need the same listview with same items available for click no matter what the conditions of positions are, so I need them all enabled. What actions should I call on the adapter? 

} 

Le problème est que je peux avoir un listview très long aussi. Cela suppose de supporter 6000 objets. Donc, la reconsolidation n'est certainement pas une option.

Merci,

Répondre

25

Qu'en est-il d'avoir une variable d'instance sur l'adaptateur:

boolean ignoreDisabled = false; 

Puis, en areAllItemsEnabled:

public boolean areAllItemsEnabled() { 
    return ignoreDisabled; 
} 

puis au début de isEnabled:

public boolean isEnabled(int position) { 
    if (areAllItemsEnabled()) { 
     return true; 
    } 
    ... rest of your current isEnabled method ... 
} 

Ensuite, vous pouvez basculer entre les deux modes en définissant correctement ignoreDisabled et en appelant invalidate sur votre ListView.

Notez que l'addition à isEnabled est probablement inutile; cela semble juste un peu plus complet.

+0

oui c'est exactement comme ça que je l'ai résolu :) bonne réponse merci! – dropsOfJupiter