私は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);」でエラーがスローされます。どこが間違っているのか教えてください。