需要使用二维数组的帮助

时间:2013-08-11 13:49:26

标签: android imageview android-arrayadapter android-drawable

所以我制作了这个自定义的2d数组适配器(基本上是从别人那里复制的,所以我不完全知道我在做什么),因为我正在制作一个跳棋棋盘游戏,我希望这个棋盘是一组二维图像视图。我只是想知道:如何在我的主要活动中实际访问此二维数组中的每个单独项目。我知道在OnClick中它给了我选择的视图和位置,但我只是想知道是否有任何方法可以做像array [row] [column] .setBackgroundResource(R.drawable.piecered2)这样的事情在我的主要活动中。

public class GridViewAdapter extends BaseAdapter {
private Context context;
ImageView[][] gridContent;
int rowPosition, columnPosition, count;

public GridViewAdapter(Context c, ImageView[][] content){
    context = c;
    count = 0;
    gridContent = new ImageView[content.length][content[0].length];
    for(int i = 0; i<gridContent.length; i++){
        for(int j = 0; j<gridContent[i].length; j++){
            gridContent[i][j] = content[i][j];
            count++;
        }
    }
    rowPosition = 0;
    columnPosition = 0;
}

public int getCount() {
    return count;
}
public int getRowCount(){
    return gridContent.length;
}
public int getColumnCount(){
    return gridContent[0].length;
}
public Object getItem(int rowNum, int columnNum) {
    return gridContent[rowNum][columnNum];
}
public View getView(int position, View view, ViewGroup group) {
    ImageView imageView;
    if(view == null){
        imageView = new ImageView(context);
    }
    else{
        imageView = (ImageView) view;
    }
    columnPosition = position % gridContent[0].length;
    rowPosition = (position - columnPosition)/gridContent[0].length;

    imageView.setLayoutParams(new GridView.LayoutParams(100, 100));
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

    //Just Setting Up the Initial State of the Board Here
    if(columnPosition%2 != 0 && rowPosition == 6){
        setRed(imageView);
    } else if(columnPosition%2 == 0 && (rowPosition ==5 || rowPosition==7)){
        setRed(imageView);
    }

    else if(columnPosition%2 != 0 && (rowPosition == 0||rowPosition==2)){
        setBlack(imageView);
    } else if(columnPosition%2 == 0 && rowPosition == 1){
        setBlack(imageView);
    }

    return imageView;

}

public Object getItem(int position){
    return null;
}
public long getItemId(int position) {
    return 0;
}

}

1 个答案:

答案 0 :(得分:1)

你不是自己发布解决方案:

ImageView[][] gridContent;

// fill the array

// ...    

gridContent[row][column].setImageResource(yourresource);

将为ImageView设置图像资源,假设“gridContent”是ImageViews的2D数组。 只需确保数组实际上已填充已使用“= new ImageView(this)”初始化的ImageView。否则你将遇到NullPointerException。

此外,我建议您将getItem()方法更改为以下内容:

/** use ImageView as the return type instead of Object */
public ImageView getItem(int rowNum, int columnNum) {
    return gridContent[rowNum][columnNum];
}

这样您就可以在Activity中执行以下操作:

GridViewAdapter adapter = new GridViewAdapter(this); // make sure the adapter contains a filled ImageView array
adapter.getItem(row, column).setImageResource(yourresource);