私はAndroidプログラミングが初めてです。私は非常に単純なアプリケーションを作成しています.5枚以上の静的な画像があります(drawableフォルダに保存されています)。これで、すべての画像を gridView に表示するアクティビティを作成しました。2番目の位置の画像をクリックすると、その特定の画像を(ImageViewを使用して)フルサイズで表示する新しいアクティビティが開き、画像をナビゲートするための次の次/前のボタンが表示されます(ユーザーが最初の画像、彼/彼女は gridView から任意の画像を選択でき、ナビゲーションはそのポイント自体から開始されます)。私の問題は、ボタンをナビゲートするための画像の数に等しいスイッチケースの数をハードコーディングしたくないということです。必要なシナリオを実装する他の方法はありますか? または、同じことを達成するために使用できるAndroidの他の機能はありますか?
前もって感謝します!!!
コードも追加しています (最初のアクティビティ):
public class GridViewActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid_view);
GridView gridview = (GridView) findViewById(R.id.gridView);
gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
//Create an Intent
Intent intent = new Intent(getApplicationContext(), FullImageActivity.class);
intent.putExtra("image", position);
startActivity(intent);
}
});
}
}
Second Activity:
public class FullImageActivity extends Activity implements OnClickListener {
Button button;
int drawable;
ImageView display;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_full_image);
Intent intent = getIntent();
display = (ImageView) findViewById(R.id.fullImageView);
ImageView imageView = null;
String idName = "ivImage";
int id;
for (int i = 1; i <= 2; i++) {
id = getResources().getIdentifier(idName + i, "id",
getPackageName());
imageView = (ImageView) findViewById(id);
imageView.setTag((Integer) i);
imageView.setOnClickListener(this);
if (i == 1) {
// make sure that your "drawable" has a value different than 0!
// otherwise a click on setWall button might result into a crash
drawable = id;
}
}
int pos = intent.getExtras().getInt("image");
ImageAdapter imageAdapter = new ImageAdapter(this);
imageView.setImageResource(imageAdapter.mThumbIds[pos]);
Log.i("pos", "" + pos);
// System.out.println("pos: " + pos);
button = (Button) findViewById(R.id.btnNextScreen);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
InputStream inputStream = getResources().openRawResource(
drawable);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
try {
getApplicationContext().setWallpaper(bitmap);
} catch (IOException e) {
// use Log.e() with all 3 params instead of
// e.printStackTrace();
Log.e("MyTag", "couldn't set wallpaper", e);
}
}
});
}
@Override
public void onClick(View v) {
// just to make sure that the clicked view is a ImageView
if (v instanceof ImageView) {
ImageView imageView = (ImageView) v;
int place = (Integer) imageView.getTag();
int drawableId = getResources().getIdentifier("image" + place,
"drawable", getPackageName());
display.setImageResource(drawableId);
drawable = drawableId;
}
}
}
@WarrenFaithが私に提案したコードを追加しました。提案されたコードを追加した後、「imageView.setTag((Integer) i);」でエラーがスローされます。どこが間違っているのか教えてください。