如何知道GridView完全绘制并准备好了?

8

我有一个带有自定义适配器的长GridView,如何知道GridView何时完全显示并准备好?

这是我的代码问题:

dashboard = (GridView) findViewById(R.id.dashboard);
dashboard.setAdapter(new ListItemsAdapter(this, allIcons));
AlertSomeItemsOfTheListView();

在该序列中,方法“AlertSomeItemsOfTheListView”在GridView完全绘制之前被执行。

哦!顺便问一下,ListView有多长? - Kalpesh Lakhani
你不需要这样做。ListView 只会向适配器请求当前显示的那些项。 - Vinay S Shenoy
问题是我想使用外部方法更改ListView的内容,但当我将它们写在以下两行中时,第二行会在ListView完全绘制之前执行。 - Shehabic
@KalpeshLakhani 实际上这是一个4行4列的GridView,但是适配器中getView方法中的代码会消耗一些时间,因为它在ListItem中放置了TextView和ImageView的外部引用(稍后由外部方法用于更改其内容)。 - Shehabic
好的!伙计,我明白你的问题了。而且确实很关键。顺便说一下,如果你觉得舒适的话,可以尝试懒加载。 - Kalpesh Lakhani
我找到了一个解决办法,称之为“轮询方式”(当在getView中调用时,我想要更改的最后一项会切换一个公共布尔值),而我的另一种方法是休眠100毫秒并检查这个布尔值,一旦它被切换,就开始更改布局的内容。 - Shehabic
2个回答

18
您可以获取您的GridViewViewTreeObserver实例,并使用它来监听事件,例如onLayout。您可以使用View.getViewTreeObserver()获取您的ViewViewTreeObserver。我不确定onLayout事件是否足够,因为它并不完全意味着一个View已经完全绘制,但您可以尝试一下。

这里有一个代码示例,您可以使用它来监听onLayout事件(例如,在您的ActivityonCreate方法中使用此类代码):

dashboard.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {
            AlertSomeItemsOfTheListView();

            // unregister listener (this is important)
            dashboard.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        }
    });

注意:在调用后注销监听器非常重要。如果不这样做,它将在每个onLayout事件上被调用,这不是我们想要的(我们只希望它执行一次)。

2
对于V13+,"removeGlobalOnLayoutListener"已被弃用。请使用"removeOnGlobalLayoutListener"代替。 - averydev

0
当GridView/ListView有一个适配器时,在显示要在视图中的项目时,它会调用getView。如果您确实需要在所有视图都显示后调用方法,可以这样做...
while(!dashboard.getAdapter().areAllItemsEnabled()){
   //wait
}

AlertSomeItemsOfTheListView();

我不确定这会不会起作用,但是看起来 http://developer.android.com/reference/android/widget/GridView.html#getAdapter() 和 http://developer.android.com/reference/android/widget/ListAdapter.html 的文档似乎是这样的。


我找到了一个类似于你的答案“轮询方式”的解决方法(我想要更改的最后一项是在getView中调用时切换公共布尔值),而我的另一种方法是睡眠100毫秒并检查此布尔值,一旦它被切换,就开始更改布局的内容。 - Shehabic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接