0

我正在创建一个TutorialManager处理应用程序使用的所有用户辅导。

我有一个向自身添加视图,包括在调用ViewGroup后填充项目的 GridView 。onMeasure()

我正在调用应该对 gridview 执行操作的 TutorialManagers 方法,但它需要知道何时填充 gridview 才能使用其中的任何项目

ViewGroup我在添加了所有视图后立即调用的回调方法

问题是 TutorialManager 需要知道视图的 X 和 Y 坐标以便使用ShowCaseView

我添加了一个使用 postDelayed(action, 100); 的解决方法;这似乎适用于我的手机,但如果在某些设备上视图布局需要超过 100 毫秒怎么办?它会搞砸整个辅导系统。

除了创建具有回调方法的自定义视图之外,我想不出任何其他方法,该回调方法在视图位置已知后调用。

处理屏幕上的布局视图异步发生的问题的常见方法是什么?

4

1 回答 1

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.
    }
}

请注意,这将经常被调用。我建议您在不需要时立即删除。

于 2014-01-21T14:33:34.797 回答