Как узнать, когда GridView полностью нарисован и готов?

У меня есть длинный GridView с пользовательским адаптером. Как узнать, когда GridView полностью отображается и готов?

Вот моя проблема в коде:

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

В последовательности метод «AlertSomeItemsOfTheListView» выполняется до полного рисования GridView.

Solutions Collecting From Web of "Как узнать, когда GridView полностью нарисован и готов?"

Вы можете получить экземпляр ViewTreeObserver для своего GridView и использовать его для прослушивания таких событий, как onLayout . Вы можете получить ViewTreeObserver для своего View используя View.getViewTreeObserver() . Я не уверен, что событие 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 чего мы здесь не хотим (мы хотим, чтобы он выполнялся только один раз).

Когда GridView / ListView имеет адаптер, он вызывает getView, когда он отображает элементы, которые должны отображаться. Если вам действительно нужно вызвать метод после отображения всех представлений, вы можете сделать что-то вроде ….

 while(!dashboard.getAdapter().areAllItemsEnabled()){ //wait } AlertSomeItemsOfTheListView(); в 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, похоже, будет так.