Android 在视图组中以编程方式添加子视图

Android 在视图组中以编程方式添加子视图,android,viewgroup,Android,Viewgroup,我正在创建一个自定义视图组,它的工作方式与GridView类似,但在添加和定位子视图时遇到了一些困难(渲染后视图为空) 这是我的自定义视图组: public class BoardView extends ViewGroup { private static final int mCols = 5; private static final int mRows = 7; private Context mContext; private Integer[]

我正在创建一个自定义视图组,它的工作方式与GridView类似,但在添加和定位子视图时遇到了一些困难(渲染后视图为空)

这是我的自定义视图组:

public class BoardView extends ViewGroup {


    private static final int mCols = 5;
    private static final int mRows = 7;

    private Context mContext;
    private Integer[] mNumbers;
    private Integer mRightOption;
    private Integer mSize;

    public BoardView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        mNumbers = randomNumbers(); // fill the array with 35 random numbers
    }

    // ViewGroup methods

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        if (mNumbers == null || mNumbers.length == 0)
            return;

        Log.d("BoardView", String.format("left: %s  top: %s  right: %s  bottom: %s", left, top, right, bottom));

        int counter = 0;

        removeAllViews();

        for (int c = 0; c < mCols; c++) {
            for (int r = 0; r < mRows; r++) {
                final int currentNumber = mNumbers[counter];

                LayoutParams params = new LayoutParams(mSize, mSize);

                final int viewLeft = left + (c * mSize);
                final int viewTop = top + (r * mSize);
                final int viewRight = right - ((mCols - (c + 1)) * mSize);
                final int viewBottom = bottom - ((mRows - (r + 1)) * mSize);

                Log.d("NumberView", String.format("left: %s  top: %s  right: %s  bottom: %s", viewLeft, viewTop, viewRight, viewBottom));

                NumberView numberView = new NumberView(mContext);
                numberView.setLayoutParams(params);
                numberView.setNumber(currentNumber);
                numberView.layout(
                        viewLeft,
                        viewTop,
                        viewRight,
                        viewBottom);

                addView(numberView);

                counter++;
            }
        }
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // Try for a width based on our minimum
        int minw = getPaddingLeft() + getPaddingRight() + getSuggestedMinimumWidth();

        int w = Math.max(minw, MeasureSpec.getSize(widthMeasureSpec));

        // Whatever the width ends up being, ask for a height that would let the pie
        // get as big as it can
        int minh = w + getPaddingBottom() + getPaddingTop();
        int h = Math.min(MeasureSpec.getSize(heightMeasureSpec), minh);

        mSize = w / 5;

        setMeasuredDimension(w, h);
    }

}
公共类BoardView扩展了ViewGroup{
专用静态最终int mCols=5;
专用静态最终int mRows=7;
私有上下文;
私有整数[]个数;
私有整数选项;
私有整数mSize;
公共BoardView(上下文、属性集属性){
超级(上下文,attrs);
mContext=上下文;
mNumbers=randomNumbers();//用35个随机数填充数组
}
//视图组方法
@凌驾
仅限受保护的空心布局(布尔值已更改、整数左侧、整数顶部、整数右侧、整数底部){
if(mNumbers==null | | mNumbers.length==0)
回来
Log.d(“BoardView”,String.format(“左:%s上:%s右:%s下:%s”,左,上,右,下”);
int计数器=0;
移除所有视图();
对于(int c=0;c

有什么问题吗?

为什么要删除所有视图并在每个布局上创建新视图?@Karakuri,我删除了该行,但它仍然不起作用。这并不能回答我的问题。