2013-11-25 33 views
5

我有一個ViewGroup可以有很多LinearLayout s。並且每個LinearLayout都可以有許多嵌套的子視圖。我想要的是,如果LinearLayout中的任何視圖(甚至是深嵌套)都得到了重點關注,則應該調用其主要父項LinearLayout的自定義方法。子視圖焦點變化android

我想要做的最後一件事情是在每個深度嵌套的子視圖LinearLayout上設置OnFocusChangeListener,並且該偵聽器將調用其父級的自定義方法。但這是非常糟糕的方式。

是否有任何方法可以覆蓋父親LinearLayout,每次它的任何嵌套子視圖的焦點更改時都會調用它?

+0

嗨@xmen,你最終做了什麼? –

回答

1

類似這樣試試:

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

你可以使用contentView.getViewTreeObserver().addOnGlobalFocusChangeListener()或覆蓋在根的ViewGroup的ViewGroup.requestChildFocus()requestChildFocus()沿視圖父鏈傳遞)。

+0

這是做到這一點的最佳方式 – henry74918