2011-06-16 6 views
4

Est-ce que quelqu'un sait quel est le mécanisme approprié lors de la création d'un contrôle composé personnalisé pour appliquer les changements d'état du conteneur à tous les enfants? Il me semble qu'il devrait y avoir un moyen simple de configurer un ViewGroup pour transférer tous les changements d'état (enfoncés, activés, etc.) à chaque enfant.Transition des contrôles composés Etat

Par exemple, si je crée un widget personnalisé le long des lignes de:

public class MyWidget extends RelativeLayout { 

    private TextView mTitleView, mValueView; 
    private ImageView mImageView; 

    public ValueButton(Context context) { 
     this(context, null); 
    } 

    public ValueButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     //View setup, etc. 
    } 
} 

Dans de nombreux cas, il y a des listes d'état étirables ou couleur attachés aux enfants que je veux basculer lorsque des modifications sont applicables à la widget global dans son ensemble. Que dois-je ajouter à un tel widget pour que, par exemple, lorsque j'appelle MyWidget.setEnabled() ou que l'on appuie sur MyWidget, ces changements d'état filtrent la hiérarchie?

Merci!

Répondre

3

Ajouter android:duplicateParentState="true" à chaque enfant (itérer peut-être par les Childs en utilisant getChildAt(int index))

http://developer.android.com/reference/android/view/View.html#attr_android:duplicateParentState

Modifier: vous devez le configurer dans le fichier XML

Remarque : dans l'implémentation actuelle, définir cette propriété sur true après l'ajout de la vue à un ViewGroup peut n'avoir aucun effet. Cette propriété doit toujours être utilisée à partir de XML ou définie sur true avant d'ajouter cette vue à ViewGroup.

+0

Exactement ce dont j'avais besoin. Je savais que cela devait être simple, juste raté dans les docs; p Merci! – Devunwired

+0

c'était une vie plus sûre !!! –

0

Je ne sais pas si je vais être d'une grande aide ici, mais c'est un problème intéressant pour moi de penser parce que je pense que je vais vouloir faire quelque chose de très similaire.

En termes d'informations d'état en cascade vers des vues enfant, une approche possible pourrait-elle être de contenir uniquement cette information d'état dans le ViewGroup parent, et dans les vues enfants utiliser getParent() pour accéder à cette information?