gpt4 book ai didi

java - 在 Gridview 中更新图像时出现问题

转载 作者:行者123 更新时间:2023-11-30 00:06:53 24 4
gpt4 key购买 nike

我正在 android 中构建一个简单的 floodit 游戏,并且正在努力使 gridview 或者更确切地说是“ImageAdapterGridView”在单击时更新图像。当用户点击一个单元格时,游戏会记录该单元格的颜色并使左上角的单元格颜色相同。问题是我无法重绘网格。我在网上找到的所有解决方案似乎都以与我不同的方式填充网格。

public class GameActivity extends AppCompatActivity {

public int clickedCell;

public String colour = "error";

public int[] numbers = new int[64];

public Context mContext;

public GridView androidGridView;

public Integer[] imageIDs = {
R.drawable.blue, R.drawable.orange, R.drawable.pink, R.drawable.purple, R.drawable.red, R.drawable.yellow, R.drawable.blue, R.drawable.orange,
R.drawable.blue, R.drawable.orange, R.drawable.pink, R.drawable.purple, R.drawable.red, R.drawable.yellow, R.drawable.blue, R.drawable.orange,
R.drawable.blue, R.drawable.orange, R.drawable.pink, R.drawable.purple, R.drawable.red, R.drawable.yellow, R.drawable.blue, R.drawable.orange,
R.drawable.blue, R.drawable.orange, R.drawable.pink, R.drawable.purple, R.drawable.red, R.drawable.yellow, R.drawable.blue, R.drawable.orange,
R.drawable.blue, R.drawable.orange, R.drawable.pink, R.drawable.purple, R.drawable.red, R.drawable.yellow, R.drawable.blue, R.drawable.orange,
R.drawable.blue, R.drawable.orange, R.drawable.pink, R.drawable.purple, R.drawable.red, R.drawable.yellow, R.drawable.blue, R.drawable.orange,
R.drawable.blue, R.drawable.orange, R.drawable.pink, R.drawable.purple, R.drawable.red, R.drawable.yellow, R.drawable.blue, R.drawable.orange,
R.drawable.blue, R.drawable.orange, R.drawable.pink, R.drawable.purple, R.drawable.red, R.drawable.yellow, R.drawable.blue, R.drawable.orange,
};

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

Random random= new Random();

for(int i = 0; i < numbers.length; i++) {
int number= random.nextInt(6);
numbers[i]= number;
}

for(int i =0; i < numbers.length; i++) {
if(numbers[i]==0) {
imageIDs[i] = R.drawable.blue;
}
else if(numbers[i]==1) {
imageIDs[i] = R.drawable.orange;
}
else if(numbers[i]==2) {
imageIDs[i] = R.drawable.pink;
}
else if(numbers[i]==3) {
imageIDs[i] = R.drawable.purple;
}
else if(numbers[i]==4) {
imageIDs[i] = R.drawable.red;
}
else if(numbers[i]==5) {
imageIDs[i] = R.drawable.yellow;
}
}

androidGridView = (GridView) findViewById(R.id.gridview_android_example);
androidGridView.setAdapter(new ImageAdapterGridView(this));

androidGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,
View v, int position, long id) {

ImageAdapterGridView IAGV = new ImageAdapterGridView(mContext);

clickedCell = position;
if(numbers[clickedCell]==0) {
imageIDs[0] = R.drawable.blue;
colour = "blue";
Toast.makeText(getBaseContext(), "Tile " + (position + 1) + " Selected. It is " + colour, Toast.LENGTH_SHORT).show();
IAGV.getView(0, null, parent);
}
else if(numbers[clickedCell]==1) {
imageIDs[0] = R.drawable.orange;
colour = "orange";
Toast.makeText(getBaseContext(), "Tile " + (position + 1) + " Selected. It is " + colour, Toast.LENGTH_SHORT).show();
IAGV.getView(0, null, parent);
}
else if(numbers[clickedCell]==2) {
imageIDs[0] = R.drawable.pink;
colour = "pink";
Toast.makeText(getBaseContext(), "Tile " + (position + 1) + " Selected. It is " + colour, Toast.LENGTH_SHORT).show();
IAGV.getView(0, null, parent);
}
else if(numbers[clickedCell]==3) {
imageIDs[0] = R.drawable.purple;
colour = "purple";
Toast.makeText(getBaseContext(), "Tile " + (position + 1) + " Selected. It is " + colour, Toast.LENGTH_SHORT).show();
IAGV.getView(0, null, parent);
}
else if(numbers[clickedCell]==4) {
imageIDs[0] = R.drawable.red;
colour = "red";
Toast.makeText(getBaseContext(), "Tile " + (position + 1) + " Selected. It is " + colour, Toast.LENGTH_SHORT).show();
IAGV.getView(0, null, parent);
}
else if(numbers[clickedCell]==5) {
imageIDs[0] = R.drawable.yellow;
colour = "yellow";
Toast.makeText(getBaseContext(), "Tile " + (position + 1) + " Selected. It is " + colour, Toast.LENGTH_SHORT).show();
IAGV.getView(0, null, parent);
}
}
});
}

public class ImageAdapterGridView extends BaseAdapter {

public ImageAdapterGridView(Context c) {
mContext = c;
}

public int getCount() {
return imageIDs.length;
}

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

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

public View getView(int position, View convertView, ViewGroup parent) {
ImageView mImageView;

if (convertView == null) {
mImageView = new ImageView(mContext);
mImageView.setLayoutParams(new GridView.LayoutParams(130, 130));
mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
mImageView.setPadding(1, 4, 1, 4);
} else {
mImageView = (ImageView) convertView;
}
mImageView.setImageResource(imageIDs[position]);
return mImageView;
}
}

这是我的主课。目前我正在尝试重新调用 getView() 类,希望这会重新绘制图像,但我不知道这是否可能。如果需要任何其他信息,请告诉我。

非常感谢。

最佳答案

将适配器提取到变量中:

//// extract adapter into a variable instead of creating inline
// androidGridView.setAdapter(new ImageAdapterGridView(this));

ImageAdapterGridView adapter = new ImageAdapterGridView(this);
androidGridView.setAdapter(adapter);

然后您可以调用 .notifyDataSetChanged 来刷新您的 onclick 中的 View :

adapter.notifyDataSetChanged();

您可以在 onClick 方法的底部执行一次。


您还在点击处理程序中创建了第二个适配器:

ImageAdapterGridView IAGV = new ImageAdapterGridView(mContext);

这完全是在创建一个新的适配器,因此此时您将有两个适配器,但其中一个未附加到 View 。


另一件小事是它的名字有点令人困惑,因为它是一个适配器,但命名时就好像它是一个 View 一样。我可能会将其命名为 ImageGridViewAdapter

关于java - 在 Gridview 中更新图像时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48815893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com