2013-11-25 14 views
5

Mam ViewGroup, który może mieć wiele LinearLayout s. I każdy LinearLayout może mieć wiele zagnieżdżonych widoków podrzędnych. To, czego chcę, to to, że jeśli jakikolwiek widok (nawet głęboko zagnieżdżony) w obiekcie LinearLayout zostanie wyostrzony, powinien wywołać niestandardową metodę swojego głównego obiektu macierzystego: LinearLayout.Zmiana ostrości widoku dziecka Android

Ostatnią rzeczą, którą chcę zrobić, to ustawić OnFocusChangeListener na każdym pojedynczym zagnieżdżonym widoku podrzędnym LinearLayout i ten detektor wywoła metodę niestandardową swojego rodzica. Ale to naprawdę zły sposób.

Czy istnieje metoda, która może zastąpić rodzica LinearLayout, która jest wywoływana za każdym razem, gdy zmienia się jej zagnieżdżone pole widoku podrzędnego?

+0

Hi @ xmen, więc co robiłeś? –

Odpowiedz

1

spróbować czegoś podobnego do tego:

View v = getWindow().getCurrentFocus(); 
ViewParent parent = v.getParent(); 
while (parent != null) { 
    if (parent instanceof LinearLayout) { 
     LinearLayout l = (LinearLayout) parent; 
     l.myMethod(); 
     parent = l.getParent(); 
    } else if(parent instance of FrameLayout){ 

    } 
    // and so on 
    . 
    . 
    . 
} 
3

Można użyć contentView.getViewTreeObserver().addOnGlobalFocusChangeListener() lub nadpisać ViewGroup.requestChildFocus() z ViewGroup root (requestChildFocus() przechodzi wzdłuż łańcucha widoku macierzystego).

+0

jest to najlepszy sposób na zrobienie tego – henry74918

Powiązane problemy