Java 从附加的OnPreDrawListener对象获取ViewTreeObserver对象
如何让观察者进入监听器? 例如:Java 从附加的OnPreDrawListener对象获取ViewTreeObserver对象,java,android,android-layout,observers,Java,Android,Android Layout,Observers,如何让观察者进入监听器? 例如: 要么将其设置为最终值,要么将其声明为实例变量,即在onCreate之前声明它,并将其初始化onCreate final ViewTreeObserver myObserver = myLayout.getViewTreeObserver(); 是由annonymous内部类实现的接口。因此,要访问变量,它必须是final我已经尝试使用listener实例, 我不知道它有多准确,但它是有效的:) 然后我打电话 ViewTreeObserver observer
要么将其设置为最终值,要么将其声明为实例变量,即在
onCreate
之前声明它,并将其初始化onCreate
final ViewTreeObserver myObserver = myLayout.getViewTreeObserver();
是由annonymous内部类实现的接口。因此,要访问变量,它必须是
final
我已经尝试使用listener实例,
我不知道它有多准确,但它是有效的:)
然后我打电话
ViewTreeObserver observer = myLayout.getViewTreeObserver();
MyOnPreDrawListener myListener = new MyOnPreDrawListener();
myListener.setMyLayout(myLayout);
observer.addOnPreDrawListener(myListener);
使
myObserver
成为final
变量…非常感谢,我将尝试向OnPreDrawListener扩展对象添加实例变量。@Hovo实例变量意味着您必须在创建时将其声明在外部,如ViewTreeObserver myObserver
然后在onCreate
中初始化它。明白了,您指的是onCreate方法所属的实例,而不是侦听器实例。@Hovo读取java文档匿名类无法访问其封闭范围内未声明为final或有效final的局部变量。这就是为什么我要你做最后的决定。第二种方式声明您的relatvie布局和ViewTreeObserver myObserver代码>在onCreate之前,它会工作。我知道什么是final,但我们不能让每个局部变量都是final,因为我们不能在内部匿名代码中访问它们。当我希望JVM不允许任何人和我更改该变量时,我使用final。同样,我们不能将区域设置变量设置为对象的字段
final class MyOnPreDrawListener implements OnPreDrawListener
{
private RelativeLayout myLayout;
public void setMyLayout(RelativeLayout layout){
myLayout = layout;
}
@Override
public boolean onPreDraw() {
// now I have myLayout here
return true;
}
}
ViewTreeObserver observer = myLayout.getViewTreeObserver();
MyOnPreDrawListener myListener = new MyOnPreDrawListener();
myListener.setMyLayout(myLayout);
observer.addOnPreDrawListener(myListener);