GridView getChildAt()返回null

时间:2013-04-05 16:00:11

标签: android gridview view

我正在尝试从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;
}

1 个答案:

答案 0 :(得分:9)

在第一次布局传递期间,

GridView将从适配器填充自身。这意味着onCreate()中不会有子女。等待第一个布局传递的最简单方法是使用ViewTreeObserver(请参阅View.getViewTreeObserver())注册全局布局侦听器。第一次调用侦听器时,网格应包含子节点。

请注意,如果您想要更改GridView其中一个子项的背景,您应该从适配器执行此操作。由于视图被回收,后台可能会在以后“移动”到另一个视图。