我有一个带有自定义适配器的长GridView,我怎么知道GridView何时完全显示并准备就绪?
这是我在代码中遇到的问题:
dashboard = (GridView) findViewById(R.id.dashboard);
dashboard.setAdapter(new ListItemsAdapter(this, allIcons));
AlertSomeItemsOfTheListView();
在序列中,在完全绘制GridView之前执行方法“AlertSomeItemsOfTheListView”。
答案 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会让它看起来像是这样。