谁能解释为什么 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/