所以我制作了这个自定义的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;
}
}
答案 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);