2013-11-25 30 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