Frage

How can I get the observer inside the listener? example:

ViewTreeObserver myObserver = myLayout.getViewTreeObserver();
myObserver.addOnPreDrawListener(new OnPreDrawListener() {
    @Override
    public boolean onPreDraw() {
        // I want to get the myLayout or myObserver here, 
        // but I don't want to use the lines below
        RelativeLayout myLayout = (RelativeLayout)findViewById(myId);
        myLayout.getViewTreeObserver().removeOnPreDrawListener(this);
War es hilfreich?

Lösung 2

Either make it final or declare it as a instance variable ie declare it before onCreate and initialize it onCreate

final ViewTreeObserver myObserver = myLayout.getViewTreeObserver();

http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html#accessing

ViewTreeObserver.OnPreDrawListener is a interface implemented by annonymous inner class. SO to access the variable it must be final.

Andere Tipps

I have tried to play with listener instance, I don't know how accurate is it, but it works :)

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;
    }

}

then I call

ViewTreeObserver observer = myLayout.getViewTreeObserver();
MyOnPreDrawListener myListener = new MyOnPreDrawListener();
myListener.setMyLayout(myLayout);
observer.addOnPreDrawListener(myListener);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top