GridView getChildAt () возвращает null

Я пытаюсь получить представление из GridView. К сожалению, он возвращает null .

OnCreate ():

 GridView gridview = (GridView) findViewById(R.id.gridView); gridview.getChildAt(3).setBackgroundResource(R.drawable.list_selector_holo_light); 

gridview.getChildCount() возвращает 0 тоже!

Что я могу сделать, чтобы получить этот вид? Я знаю, что есть возможность изменить фон в адаптере, но я должен делать это динамически.

Спасибо за помощь!


РЕДАКТИРОВАТЬ

setAdapter:

 gridview.setAdapter(new ImageAdapter(this)); 

ImageAdapter:

 public View getView(int position, View convertView, ViewGroup parent) { final ImageView imageView; if (convertView == null) { // if it's not recycled, initialize some attributes imageView = new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8, 8, 8, 8); } else { imageView = (ImageView) convertView; } imageView.setImageResource(mThumbIds[position]); return imageView; } 

GridView будет заселен от адаптера во время первого прохода макета. Это означает, что у него не будет детей в onCreate() . Самый простой способ дождаться первого перехода макета – использовать ViewTreeObserver (см. View.getViewTreeObserver() ) для регистрации глобального View.getViewTreeObserver() макетов. При первом вызове слушателя сетка должна содержать детей.

Обратите внимание: если вы хотите изменить фон одного из дочерних элементов GridView вам действительно нужно сделать это с адаптера. Поскольку виды возвращаются, фон может появиться, чтобы перейти к другому виду позже.