Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改图像的二维数组OnClick_Java_Android_Imageview_Android Imageview - Fatal编程技术网

Java 更改图像的二维数组OnClick

Java 更改图像的二维数组OnClick,java,android,imageview,android-imageview,Java,Android,Imageview,Android Imageview,我是Android开发和Java的初学者。我在布局2d图像阵列中有许多ImageView。我试图实现的是,每次单击ImageView时,它都应该根据当前图像显示的某些逻辑设置阵列中的图像,例如,每次单击后阵列中的下一个图像。我在谷歌上搜索并成功地做到了这一点,但它看起来相当长 public class GameActivity extends AppCompatActivity { private int [] inputTiles = {R.drawable.one, R.drawab

我是Android开发和Java的初学者。我在布局2d图像阵列中有许多ImageView。我试图实现的是,每次单击ImageView时,它都应该根据当前图像显示的某些逻辑设置阵列中的图像,例如,每次单击后阵列中的下一个图像。我在谷歌上搜索并成功地做到了这一点,但它看起来相当长

public class GameActivity extends AppCompatActivity {
    private int [] inputTiles = {R.drawable.one, R.drawable.two, ...// more images};
    Random r = new Random();
    int matSize = 5;
    int[][] indexMat = new int[matSize][matSize];

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

        for (int i=0; i<matSize; i++) {
            for (int j=0; j<matSize; j++) {
                indexMat[i][j] = r.nextInt(10);
            }
        }

        final ImageView tile00 = findViewById(R.id.tile00);
        tile00.setImageResource(inputTiles[indexMat[0][0]]);
        tile00.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            indexMat[0][0] = (indexMat[0][0]+1)%5;
            tile00.setImageResource(inputTiles[indexMat[0][0]]);
            }
        });

        final ImageView tile01 = findViewById(R.id.tile01);
        tile01.setImageResource(inputTiles[indexMat[0][1]]);
        tile01.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                indexMat[0][1] = (indexMat[0][1]+1)%5;
                tile01.setImageResource(inputTiles[indexMat[0][1]]);
            }
        });

        ...// a lot more ImageViews

    }
}

有什么想法吗?

最简单的方法是使用GridLayoutManager创建一个RecyclerView。下面是一个关于如何在RecyclerView中实现所需功能的示例


在RecyclerView中设置这些图像后,可以根据单击的位置轻松管理onBindViewHolder函数中的单击侦听器

你在干什么?永远不要在集合中保留视图。您可以使用网格适配器。用于此目的的GridView或ListView。
final ImageView[][] tiles = {{findViewById(R.id.tile00), findViewById(R.id.tile01), findViewById(R.id.tile02),...},
        {findViewById(R.id.tile10), ...,}};

for (int i=0; i<3;i++){
    for (int j=0; j<3; j++){
        tiles[i][j].setImageResource(inputTiles[indexMat[i][j]]);
        tiles[i][j].setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                indexMat[i][j] = //doesn't work
            }
        });
    }
}