8

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

这是我在代码中的问题:

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

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

4

2 回答 2

19

您可以为您获取ViewTreeObserver实例GridView并使用它来侦听诸如onLayout. 你可以得到ViewTreeObserver你的View使用View.getViewTreeObserver()。我不确定onLayoutevent 是否足以满足您的需要,因为它并不完全意味着 aView已完全绘制,但您可以尝试一下。

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

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

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

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

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

于 2013-01-02T09:19:33.917 回答
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让它看起来会。

于 2013-01-02T09:12:34.093 回答