较短的代码,因此用相同的值填充数组
Shorter code so fill arrays with same Value
对于我的 "memory" 游戏,我使用 GridView 来显示 12 张牌。
一开始的牌都是一样的
在我找到的所有示例中,您会看到类似于此代码的内容,用于将图片 ID 添加到您的 ImageAdapter:
private Integer[] mThumbIds = {
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back
};
有没有更短、更干净、更好的方法?
像这样:
private Integer[] mThumbIds = new Integer[11];
Arrays.fill(mThumbIds, R.drawable.card_back);
完整 class:
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import java.util.Arrays;
public class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
// if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(150, 150));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
// references to our images
Integer[] mThumbIds = new Integer[11];
Arrays.fill(mThumbIds, R.drawable.card_back);
/* R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back
};*/
}
实际上,就是这样 - 您可以使用 java.util.Arrays#fill
:
Arrays.fill(mThumbIds, R.drawable.card_back);
您可以使用 for 循环来初始化数组:
int arr[] = new int[12]; // 0 ... 11
for(int i = 0; i < arr.length; i++)
{
arr[i] = R.drawable.card_back;
}
抱歉,低代表评论@Mureinik 的回答。
通常为了保持我的构造函数干净并初始化对所有实例都相同的变量,我这样做:
private Integer[] mThumbIds = new Integer[11];
{
Arrays.fill(mThumbIds, R.drawable.card_back);
}
此块在构造函数之前按实例调用。
对于我的 "memory" 游戏,我使用 GridView 来显示 12 张牌。
一开始的牌都是一样的
在我找到的所有示例中,您会看到类似于此代码的内容,用于将图片 ID 添加到您的 ImageAdapter:
private Integer[] mThumbIds = {
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back
};
有没有更短、更干净、更好的方法? 像这样:
private Integer[] mThumbIds = new Integer[11];
Arrays.fill(mThumbIds, R.drawable.card_back);
完整 class:
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import java.util.Arrays;
public class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
// if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(150, 150));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
// references to our images
Integer[] mThumbIds = new Integer[11];
Arrays.fill(mThumbIds, R.drawable.card_back);
/* R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back,
R.drawable.card_back, R.drawable.card_back
};*/
}
实际上,就是这样 - 您可以使用 java.util.Arrays#fill
:
Arrays.fill(mThumbIds, R.drawable.card_back);
您可以使用 for 循环来初始化数组:
int arr[] = new int[12]; // 0 ... 11
for(int i = 0; i < arr.length; i++)
{
arr[i] = R.drawable.card_back;
}
抱歉,低代表评论@Mureinik 的回答。 通常为了保持我的构造函数干净并初始化对所有实例都相同的变量,我这样做:
private Integer[] mThumbIds = new Integer[11];
{
Arrays.fill(mThumbIds, R.drawable.card_back);
}
此块在构造函数之前按实例调用。