为什么我不能使用自定义按钮填充自定义Button ArrayList?

时间:2015-11-10 22:22:52

标签: java android gridview arraylist android-custom-view

这是我的自定义Button类的一部分,Tile:

public class Tile extends Button {

// Position of this view in AL tiles.
private int index;
// Height of tile in pixels.
private int layout_height;
// Width of tile in pixels.
private int layout_width;


public Tile (Context context){
    super(context);
}


public Tile (Context context, AttributeSet attrs) {
    super(context, attrs);
    setUpAttributes(attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    layout_height = heightMeasureSpec;
    layout_width = widthMeasureSpec;
}

private void setUpAttributes(AttributeSet attrs){
    TypedArray a = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.Tile, 0, 0);
    try {
        index = a.getIndex(R.styleable.Tile_index);
        columnPosition = a.getInt(R.styleable.Tile_columnPosition, 0);
        rowPosition = a.getInt(R.styleable.Tile_rowPosition, 0);
    } finally {
        a.recycle();
    }
}

我可以直接将此类的任意数量的实例扩展到GridView。当我尝试在其他类中使用此类时,问题就出现了,特别是当我尝试更改变量的值时。例如,在我的自定义GridView类中,我想填充一个包含Tile类型对象的ArrayList。这就是我这样做的方式:

public void populateTileCollection() {
    int index = 0;
    for (int y = 0; y < getRowCount(); y++) {
        for (int x = 0; x < getColumnCount(); x++) {
            Tile tile = (Tile)findViewById(R.id.tile);
            tile.setIndex(index);
            tile.setYCoordinate(y);
            tile.setXCoordinate(x);
            tiles.add(tile);
            index++;
        }
    }
}

请注意,我在Tile类中使用准确的变量正确定义了这些setter方法。当我运行该程序时,我收到以下错误:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.app.speedsweeper.speedsweeper.Tile.setIndex(int)' on a null object reference

如果我跳过程序化工作并直接进入这些瓷砖的膨胀,它就可以了。事实上,在给它们充气时,我可以设置它们的属性。但是,当我在充气后尝试访问它们时,会发生同样的错误。

我该如何处理?

0 个答案:

没有答案