First square on GridView is blank in AndroidStudio?

﹥>﹥吖頭↗ 提交于 2020-05-21 07:36:46

问题


So I tried to make an app that plays Chess. However, for some reason, the first box on my gridview for my chessboard is blank (where the black Rook is) when the game starts. But once I make the first move, it appears with the black rook. Has anyone had an issue with GridView in Android Studio like this before? I will attach pictures below as well as my xml code for the chessboard screen and my code for the GridView.

GridView Before First Move GridView After First Move

    <Button
        android:id="@+id/resignButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="4dp"
        android:text="@string/resign"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/drawButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="1dp"
        android:text="@string/draw"
        app:layout_constraintBottom_toTopOf="@+id/gridViewBoard"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/gameText"
        android:layout_width="197dp"
        android:layout_height="36dp"
        android:layout_marginStart="18dp"
        android:layout_marginTop="12dp"
        android:layout_marginEnd="16dp"
        android:text="@string/game_text"
        android:textAlignment="center"
        android:textColor="#000000"
        android:textSize="25sp"
        app:layout_constraintEnd_toStartOf="@+id/resignButton"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toEndOf="@+id/drawButton"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/aiButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/ai"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/undoButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="4dp"
        android:text="@string/undo"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

    <GridView
        android:id="@+id/gridViewBoard"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="1dp"
        android:layout_marginEnd="1dp"
        android:layout_marginBottom="49dp"
        android:columnWidth="60dp"
        android:gravity="center_horizontal"
        android:horizontalSpacing="0dp"
        android:numColumns="8"
        android:padding="0dp"
        android:stretchMode="columnWidth"
        android:verticalSpacing="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/drawButton" />
</androidx.constraintlayout.widget.ConstraintLayout>

And here's the code that creates the Board

package com.example.chess;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatActivity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Bundle;
import com.example.chess.Model.Chess;
import com.example.chess.Model.Piece;
import com.example.chess.Model.Games;
import com.example.chess.Model.Move;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
//import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Bundle;
import java.util.*;


public class RecordedGamesActivity extends AppCompatActivity implements OnItemClickListener
{

    private Chess chess;
    private static boolean RUN_ONCE = false;
    private SquareAdapter adapter;
    private GridView board;
    private ArrayList<Move> moves;
    private ListIterator<Move> listIterator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recorded_games);

        if (!RUN_ONCE) {

            RUN_ONCE = true;
            this.chess = new Chess();
            moves = Games.gamesPlayed.get(Games.index);
            listIterator = moves.listIterator();
            adapter = new SquareAdapter(this, chess.getBoard());

        }

        final GridView boardView = (GridView)findViewById(R.id.gridViewBoard);
        boardView.setAdapter(adapter);
        this.board = boardView;
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    {
        if (!listIterator.hasNext())
        {

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Replay Complete");
            builder.setMessage("Quit replay?");

            builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    startActivity(new Intent(RecordedGamesActivity.this, MainActivity.class));
                    RUN_ONCE = false;
                    finish();
                }
            });
        }
        Move move = listIterator.next();
        chess.move(move.getStart(), move.getEnd());
        adapter.notifyDataSetChanged();
        board.setAdapter(adapter);
    }

    @Override
    public void onBackPressed() {

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Exit");
        builder.setMessage("Quit replay?");

        builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                startActivity(new Intent(RecordedGamesActivity.this, MainActivity.class));
                RUN_ONCE = false;
                finish();
            }
        });

        builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
    }
}

来源:https://stackoverflow.com/questions/61603530/first-square-on-gridview-is-blank-in-androidstudio

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!