android - isAttachedToWindow() 返回 false

标签 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();
    }
}

最佳答案

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

让我们用一个具体的例子来说话。假设您有一个带有 wrap_content/wrap_content 布局属性的 TextView



    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。

关于android - isAttachedToWindow() 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44273229/

相关文章:

android - 无法在 onDraw 内部调用 removeOnDrawListener

android - 在 Android 中设计一个按钮

java - 我无法通过 ViewPager 正确地将项目编号传递给 fragment

java - 安卓 : Get data in real-time instead of using Async-Task

java - 使用sqlite登录失败

android - 将textNoSuggestions添加到editText后如何在键盘上显示回车按钮?

android - findViewById 与 getChildAt - 哪个更快?

android - 如何在动态 View 中添加/获取数据?

Android ListView 切断比第一个项目更宽的项目

android - 使用 shareduserid 的安全性