如何知道GridView何时完全绘制并准备就绪?

时间:2013-01-02 08:49:38

标签: android android-listview

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

这是我在代码中遇到的问题:

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

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

2 个答案:

答案 0 :(得分:19)

您可以为GridView获取ViewTreeObserver个实例,并使用它来监听onLayout等事件。您可以使用View.getViewTreeObserver()ViewTreeObserver获取View。我不确定onLayout事件对您是否足够,因为它并不完全意味着完全绘制了View,但您可以尝试一下。

此处有一个代码示例,您可以使用它来监听onLayout事件(您可以使用此类代码,例如onCreate Activity方法中的代码:

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

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

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

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

答案 1 :(得分: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会让它看起来像是这样。