だから私はGridviewとImageAdapterクラスを持っています。すべての画像はフォルダから取得され、グリッドビューに入力されます。次に、クリックすると画像全体を表示する別のクラスがあります。ただし、誰かが画像をクリックするたびに、ImageAdapterを再度呼び出す必要があり、すべての画像を変数に再入力する必要があります。その後、必要な画像を選択します。これはひどく非効率的ですが、それ以外の方法はわかりません。
これが私のコードです。
グリッドビューのメインクラス(この場合はお気に入り)
public class Favorites extends Activity {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.favorites);
GridView gridview = (GridView) findViewById(R.id.favgridview);
gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,View v, int position, long id){
Intent i = new Intent(getApplicationContext(), FullImageActivity.class);
i.putExtra("id", position);
startActivity(i);
}
});
}
}
私のImageAdapterクラスでは、すべての画像をビットマップとして配列にロードしていることがわかります。
public class ImageAdapter extends BaseAdapter{
private Context mContext;
private Bitmap[]mis_fotos;
public ImageAdapter(Context c){
mContext = c;
}
public int getCount(){
get_images();
return mis_fotos.length;
}
public Bitmap getItem(int position){
get_images();
return mis_fotos[position];
}
public long getItemId(int position){
return 0;
}
public View getView(int position, View convertView, ViewGroup parent){
ImageView imageView;
if (convertView == null){
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85,85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageBitmap(mis_fotos[position]);
return imageView;
}
private void get_images(){
String dirPath = mContext.getFilesDir().getAbsolutePath() + File.separator + "favorites";
File directory = new File(dirPath);
File[] archivos = directory.listFiles();
mis_fotos = new Bitmap[archivos.length];
for (int cont=0; cont<archivos.length;cont++){
File imgFile = new File(archivos[cont].toString());
mis_fotos[cont] = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
}
}
}
そして最後に私のフルイメージクラス
public class FullImageActivity extends Activity {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.full_image);
Intent i = getIntent();
int position = i.getExtras().getInt("id");
ImageAdapter imageAdapter = new ImageAdapter(this);
ImageView imageView = (ImageView) findViewById(R.id.full_image_view);
imageView.setImageBitmap(imageAdapter.getItem(position));
}
}
したがって、完全な画像を使用する場合、渡すことができるのは、gridviewクラスの位置整数だけであることがわかります。次に、ImageAdapterクラスでget_images()を再度呼び出して、配列をもう一度再入力する必要があります。
画像がクリックされたときに、グリッドビューからフルイメージクラスに単一の画像を渡す必要があるすべてです。これを行うには、もっと簡単ではるかに効率的な方法があることを私は知っています。これが理にかなっていることを願っています。