android - gridview的每个网格中只出现一张图像

标签 android gridview

我开发了一个应用程序,我想在 GridView 内显示 SD 卡特定文件夹中的图像。该应用程序正在运行,但只有文件夹中的第一个图像出现在每个网格中,而我希望所有图像都应该显示。我不明白我哪里出错了。 下面,我发布我的代码:

专辑 Activity :

public class Album3Activity extends Activity {
static File [] mediaFiles;
static File imageDir;
GridView gridView;
ImageAdapter adapter;
Intent in;
public static final String TAG = "Album3Activity";
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.grid);
    prepareList();
    adapter = new ImageAdapter(this, mediaFiles);
    gridView = (GridView)findViewById(R.id.gridview);
    gridView.setAdapter(adapter);
    gridView.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                long arg3) {
            in = new Intent(getApplicationContext(), FullScreen.class);
            in.putExtra("id", position);
            startActivity(in);
        }
    });
}//onCreate

public static Bitmap prepareList() {
    imageDir = new File(Environment.getExternalStorageDirectory().toString()+
             "/diplomat");
    mediaFiles = imageDir.listFiles();
    Bitmap bmp = null;
    for(File imagePath:mediaFiles){
        try{
            bmp = BitmapFactory.decodeStream(imagePath.toURL().openStream());
        }catch(Exception e){
            Log.d(TAG, "Exception: "+e.toString());
        }//catch
    }//for
    Log.d(TAG, "prepareList() called");
    return bmp;
}//prepareList

}//类

图像适配器:

public class ImageAdapter extends BaseAdapter{
Activity act;
File[] mFiles;
public static final String TAG = "ImageAdapter";
public ImageAdapter(Activity act, File[] mFiles){
    super();
    this.act = act;
    this.mFiles = mFiles;
}//ImageAdapter

public int getCount() {
    return mFiles.length;
}//getCount

public Object getItem(int postion) {
    return mFiles[postion];
}//getItem

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

public static class ViewHolder{
    ImageView iv;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder view;
    LayoutInflater li = act.getLayoutInflater();
    if(convertView == null){
        view = new ViewHolder();
        convertView = li.inflate(R.layout.gridview_row, null);
        view.iv = (ImageView)convertView.findViewById(R.id.imageView1);
        convertView.setTag(view);
    }//if
    else{
        view = (ViewHolder)convertView.getTag();
    }//else
    Bitmap bmp = Album3Activity.prepareList();
    view.iv.setImageBitmap(bmp);
    Log.d(TAG, "getView called");
    return convertView;
}//getView

}//图像适配器

最佳答案

注意prepareList方法,它不会根据imageview的位置或索引返回位图,因此它会始终返回相同的图像,将其更改为接受索引参数,并相应地返回位图,如下:

public static Bitmap prepareList(int index) {
    imageDir = new File(Environment.getExternalStorageDirectory().toString()+
             "/diplomat");
    mediaFiles = imageDir.listFiles();
    File imagePath=imageDir[index];
    Bitmap bmp = null;
        try{
            bmp = BitmapFactory.decodeStream(imagePath.toURL().openStream());
        }catch(Exception e){
            Log.d(TAG, "Exception: "+e.toString());
        }//catch
   Log.d(TAG, "prepareList() called");
    return bmp;
}//prepareList

关于android - gridview的每个网格中只出现一张图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10561042/

相关文章:

java - fragment 中的自定义 GridView 适配器

javascript - 水平(旋转)网格

android - Android 应用中 google +1 按钮的客户端 ID

android - Jetpack compose 的状态栏中未显示模态 Bottom Sheet 稀松布颜色

android - react native 矢量图标显示为问号

asp.net - 访问 gridview 列中的超链接

asp.net - 如何清除gridview?

java - 从 GridView 更改项目

android - 从android中的运动事件获取所有x和y坐标

android - Camera2 可以连续访问相机预览图像