2013-11-25 26 views
5

Birçok LinearLayout s olabilir ViewGroup var. Ve her bir LinearLayout'un birçok iç içe geçmiş görünümleri olabilir. İstediğim şey, eğer bir LinearLayout'un içindeki herhangi bir görünüm (derin iç içe) bile odaklanırsa, ana üst öğesinin LinearLayout özel bir yöntemini çağırması gerekir.Çocuk bakışı odağı değiştir android

Yapmak istediğim son şey, LinearLayout'un her bir iç içe yuvalanmış alt görünümünde OnFocusChangeListener olarak ayarlanmış ve dinleyicinin üst öğesinin özel yöntemini çağırmasıdır. Ama bu gitmek için gerçekten kötü bir yoldur.

LinearLayout numaralı ana sayfanın üstesinden gelebileceğim herhangi bir yöntem var mı? Buna benzer

+0

Merhaba @ xmen, ne yaptınız? –

cevap

1

deneyin şey:

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

Sen contentView.getViewTreeObserver().addOnGlobalFocusChangeListener() kullanmak veya kök ViewGroup ait ViewGroup.requestChildFocus() geçersiz olabilir (requestChildFocus() görünüm ebeveyn zinciri boyunca geçirilir).

+0

Bu, bunu yapmanın en iyi yoludur – henry74918

İlgili konular