gpt4 book ai didi

Android fragment 生命周期 : How can I do something when the views have been drawn?

转载 作者:行者123 更新时间:2023-11-30 03:50:41 25 4
gpt4 key购买 nike

根据我的正常 Activity 经验,我的印象是 onResume()函数,您可以对 View 执行操作,并且它们已经呈现到屏幕上。

但是,我现在将一些代码转换为 FragmentonResume()当我调用 view.getWidth() 时的 fragment 它返回 0( View 是在 onCreateView 中创建的)。 View 最终会呈现,但我似乎无法在 fragment 的生命周期中访问它。

这正常吗?

最佳答案

onResume 在 Fragment 回到前台时被调用,但它不保证它仍然可见或布局已经发生。 Fragment 的 onResume 与其 Activity 相关联 - 这是来自 the documentation 的摘录:

Keep in mind that onResume is not the best indicator that your activity is visible to the user; a system window such as the keyguard may be in front. Use onWindowFocusChanged(boolean) to know for certain that your activity is visible to the user (for example, to resume a game).


获取 View 大小的最佳方法是通过 ViewTreeObserver.OnGlobalLayoutListener .它会在布局完成后调用,您可以从那里安全地获取 View 的大小。

只需在您感兴趣的 View 上注册一个 OnGlobalLayoutListener 并在布局发生后获取其大小。一旦您阅读了该值并且不关心任何进一步的更新,您应该取消注册您的监听器。 (否则会多次调用监听器。)

View v = ... ;
...
v.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {

@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
v.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
v.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}

height = v.getHeight();
width = v.getWidth();
}
});

(注意兼容性检查 - 该方法在 Jelly Bean 中已重命名。)

关于Android fragment 生命周期 : How can I do something when the views have been drawn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14205084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com