将自定义ViewGroup添加到RelativeView

时间:2012-10-15 13:59:38

标签: java android oop

我试图通过ForLoop动态地将几个自定义ViewGroup添加到现有的RelativeLayout。

当我添加它们时,不会显示任何内容。也许是因为ViewGroup在添加之前没有完成加载?

无论如何要解决这个问题?

谢谢,

GameActivity.java:

hScrollItems = (RelativeLayout) findViewById(R.id.hScrollItems);

    for (int i = 0; i < 5; i++){
        int w = getResources().getInteger(R.integer.GridItemWidth);
        int h = getResources().getInteger(R.integer.GridItemWidth);
        GridItem gi = new GridItem(getBaseContext(), w, h, GridType.EMPTY);

        LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        params.setMargins(w * i, 0, 0, 0);

        hScrollItems.addView(gi, params);
    }

GridItem.java

public GridItem(Context context, int Width, int Height, GridType Type) {
    super(context);

    /*LayoutParams params = new LayoutParams(Width, Height);
    this.setLayoutParams(params);*/

    this.setBackgroundColor(0xFFFFFF33);

    ImageView img = new ImageView(context);
    img.setBackgroundResource(R.drawable.ic_launcher);
    this.addView(img);
}
public enum GridType {
    EMPTY("EMPTY"),
    HOUSE("HOUSE");
    private String value;
    private GridType(String value) {
       this.value = value;
    }
    public String getValue() {
       return value;
    }
}

2 个答案:

答案 0 :(得分:1)

getBaseContext() isn't recommended for this.由于它是从Activity类调用的,因此您应该使用this,因为Activity扩展了Context

GridItem gi = new GridItem(this, w, h, GridType.EMPTY);

此外,我没有看到您为孩子设置任何ID或对齐信息的位置。 RelativeLayout中的视图需要设置其ID,并引用某些内容以便知道放置它们的位置。

之后,尝试拨打父母的requestLayout()

答案 1 :(得分:0)

好的我修好了!

首先,我必须将GridItem更改为RelativeLayout而不是ViewGroup

其次,我必须通过ImageViewGridItem中的img.bringToFront()带到前面。

相关问题