4

我正在尝试从 GridView 获取视图。不幸的是,它返回null

创建():

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

gridview.getChildCount()也返回 0!

我该怎么做才能获得此视图?我知道有一个选项可以更改适配器中的背景,但我必须动态地进行。

感谢帮助!


编辑

设置适配器:

gridview.setAdapter(new ImageAdapter(this));

图像适配器:

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;
}
4

1 回答 1

10

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

请注意,如果您想更改 a 的其中一个孩子的背景,GridView您确实应该从适配器中进行。由于视图被回收,背景可能会在稍后“移动”到另一个视图。

于 2013-04-05T17:15:31.403 回答