isAttachedToWindow() 返回 false

Mic*_*sky 5 android android-view

谁能解释为什么isAttachedToWindow()是false而不是true?我似乎有附件问题。

据我了解,setContentView(rl)应该将其附加RelativeLayout到窗户上。我缺少什么?

public class TestActivity extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            final RelativeLayout rl = new RelativeLayout(this);
            setContentView(rl);
            boolean isAttached = rl.isAttachedToWindow();
    }
}
Run Code Online (Sandbox Code Playgroud)

azi*_*ian 2

当您执行与视图相关的操作时,该更改实际上不会立即执行,而是会发布到MessageQueue主线程的 上,稍后这些消息将由 的下一个循环事件处理Looper。

我们用一个具体的例子来说话。想象一下你有一个TextView带有wrap_content/wrap_content布局属性的。



    TextView textView = ...;
    textView.setText("some fancy text");

    // Will print `0 0`, because this message hasn't yet beet "parsed" by `Looper`
    // Changes will take effect on the next frame
    Log.i("tag", textView.getWidth() + " " + textView.getHeight());

    // Will print `some fancy text`, because this is just a plain Java object
    Log.i("tag", textView.getText());


就您而言,如果您等待足够长的时间,您最终会看到它被附加。您可以通过View#addOnAttachStateChangeListener()API 收到有关附加状态更改的通知。