我正在创建一个TutorialManager
来处理应用使用的所有用户辅导。
我有一个ViewGroup
可以为自己添加视图,包括在调用onMeasure()
后填充项目的GridView。
我正在调用TutorialManagers方法,该方法应该在gridview上执行操作但是它需要知道gridview何时被填充才能使用任何项目
我在添加了所有视图后立即调用的ViewGroup
上添加了一个回调方法
问题是TutorialManager需要知道视图的X和Y坐标,以便使用ShowCaseView
突出显示它们
我添加了一个使用postDelayed的解决方法(action,100);这似乎适用于我的手机,但如果在某些设备上视图布局需要超过100毫秒呢?它会搞砸整个辅导系统。
除了创建一个具有回调方法的自定义视图之外,我无法想出任何其他方法,该方法在已知视图位置后调用。
处理屏幕上的铺设视图异步发生的问题的常见方法是什么?
答案 0 :(得分:0)
您可以尝试使用OnGlobalLayoutListener,只要布局发生更改就会触发(即,您的GridView和子项已经添加并测量。所以,无论您在哪里初始化GridView,都要这样做:
LayoutListener mLayoutListener = new LayoutListener;
mGridView.getViewTreeObserver().addOnGlobalLayoutListener(mLayoutListener);
private class LayoutListener implements OnGlobalLayoutListener {
@Override
public void onGlobalLayout() {
...Do your calculations here...
mGridView.getViewTreeObserver().removeOnGlobalLayoutListener(this); //If you only need this to execute once.
}
}
请注意,这会经常被调用。我建议你在不需要的时候尽快删除。