我目前正在10x10网格上工作,并试图对其框进行更改。我有3个用于该操作的类,但进行更改后无法更改视图。 3个课程:
主要(我在其中进行更改)
placeButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
mGame.place(size, isHorizontal, row, column);});
游戏(我负责处理和应用更改的地方)
System.out.println("Place Ships: " + size + isHorizontal + left + top);
if(isHorizontal == true) {//if horiz
if(gameGrid[top][left] ==0) {
for (int i = 0; i < size; i++) {
gameGrid[top][left + i] = size;
} }
else{
System.out.println("ALREADY FILLED");
}
视图(在其中绘制和绘制网格的地方)
System.out.println("SETUP VIEW ARRAY");
for (int col = 0; col < colCount; col++) {
for (int row = 0; row < rowCount; row++) {
int x = mGame.placedCell(row, col);
System.out.print(x + " ");//tocheck if the array obtained correctly
float cx = separatorSize + (chosenDiameter + separatorSize) * col;
float cy = separatorSize + (chosenDiameter + separatorSize) * row;
if(x > 0){
System.out.println("FOOOOOOOOOOOUND! "); //received fine
paint = mPlayer1Paint;
}else {
paint = mBGPaint;
}
canvas.drawRect(cx, cy, oneSide + (cx), oneSide + (cy), paint);
}
System.out.println("");
}
System.out.println("SETUP VIEW ARRAY END");
placedCell方法
mainActivity.setRow(row);
mainActivity.setCol(column);
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
int flag = gameGrid[row][column];
if(i == column && j == row){
if(flag > 0){ //because unedited places is 0, edited places are more than 0
gameGrid[row][column] = flag;
}
} } }
return gameGrid[row][column];
我的问题是我的视图类无法从我的游戏类中获取更改后的数组(gameGrid)。我试图打印数组以检查它是否正确更改了。 我还声明了Game类中的数组为静态数组,但没有任何改变。 任何帮助都将受到赞赏。
答案 0 :(得分:0)
为了在View类中进行更改,一种方法是传递 整个视图类对您要在其中更改数组gameGrid的Game类的引用。
然后,您可以在更新数组时调用view.invalidate()重新绘制网格。 invalidate()将再次调用视图类的onDraw()方法。
您可以在游戏类的构造函数中传递视图引用-
MyGameView mView;
public Game(MyGameView view)
{
mView=view;
...
}
或者在Game类内创建一个方法,以在创建视图后设置mView的值-
public void setViewReference(MyGameView view)
{
mView=view;
}
现在,在View类中创建一个公共方法,该方法将接收更新的数组并再次重绘整个网格-
public void update(int [][] updatedGameGrid) //Assuming the array is int. Change the datatype is its not an int array
{
gameGrid=updatedGameGrid; //Here gameGrid is the array inside your view class
invalidate(); // Redraw the entire View (grid) again by calling onDraw()
}
现在,在您的Game类中,您可以更新数组并将其传递给视图类
public void update()
{
... //Place you code to update the gameGrid array
mView.update(gameGrid); //Pass the array to view class
}