android - 在 GridView 中显示来自 SD 卡中特定文件夹的图像

标签 android gridview android-sdcard

我开发了一个应用程序,我必须在其中显示 SD 卡中特定文件夹中的图像。我的代码工作正常,但它显示的是 SD 卡中的所有图像。我已经将 selection args 作为我文件夹的名称,因为它已在以下帖子中提到: Displaying images from a specific folder on the SDCard using a gridview

但是,它没有用。请建议我如何执行此操作: 下面我发布了我的代码。

public class Album1Activity extends Activity {
static Cursor imageCursor;
static int columnIndex;
GridView gridView;
Intent in;
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.grid);
    String[] imgColumnID = {MediaStore.Images.Thumbnails._ID};
    Uri uri = MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI;
    imageCursor = managedQuery(uri, imgColumnID, null, null, 
                    MediaStore.Images.Thumbnails.IMAGE_ID);
    columnIndex = imageCursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);
    gridView = (GridView)findViewById(R.id.gridview);
    gridView.setAdapter(new ImageAdapter(getApplicationContext()));
    gridView.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            String[] dataLocation = {MediaStore.Images.Media.DATA};
            //String []dataLocation = {Environment.getExternalStorageDirectory().getAbsolutePath()};
            imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
                        dataLocation, null, null, null);
            columnIndex = imageCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            imageCursor.moveToPosition(position);
            String imgPath = imageCursor.getString(columnIndex);
            in = new Intent(getApplicationContext(), FullScreen.class);
            in.putExtra("id", imgPath);
            startActivity(in);
        }//onItemClickListener
    });
}//onCreate

public static class ImageAdapter extends BaseAdapter{
    private Context context;
    //Album1Activity act = new Album1Activity();
    public ImageAdapter(Context context){
        this.context = context;
    }//ImageAdapter
    public int getCount() {
        // TODO Auto-generated method stub
        return imageCursor.getCount();
    }//getCount

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }//getItem

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }//getItemId

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView iv;
        if(convertView == null){
            iv = new ImageView(context);
            imageCursor.moveToPosition(position);
            int imageID = imageCursor.getInt(columnIndex);
            iv.setImageURI(Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
                            "" +imageID));
            iv.setScaleType(ImageView.ScaleType.FIT_XY);
            iv.setPadding(5, 5, 5, 5);
            iv.setLayoutParams(new GridView.LayoutParams(100, 100));
        }//if
        else{
            iv = (ImageView)convertView;
        }//else
        return iv;
    }//getView

}//ImageAdapter

}//专辑1 Activity

最佳答案

抱歉回复晚了... 下面我贴出最终的解决方案

public class Album3 extends Activity {
File [] mediaFiles;
File imageDir;
static GridView gridView;
ImageAdapter adapter;
Intent in;
ImageButton btncam;
String name = null;
ArrayList<Bitmap> bmpArray = new ArrayList<Bitmap>();
ArrayList<String> fileName = new ArrayList<String>();
public static final String TAG = "Album3Activity";

public void onCreate(Bundle savedInstanceState) 
{
    imageDir = new File(Environment.getExternalStorageDirectory().toString()+
             "/diplomat");
    super.onCreate(savedInstanceState);
    if((imageDir.exists()))
    {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.grid);
        mediaFiles = imageDir.listFiles();
        //Log.d("Length of images",""+mediaFiles.length);
        for(File file : mediaFiles)
        {
            bmpArray.add(convertToBitmap(file));
            fileName.add(readFileName(file));
            //Log.d(TAG + "bmpArray Size", ""+bmpArray.size());
            //Log.d(TAG, "call to convertToBitmap");
        }//for

        adapter = new ImageAdapter(this, bmpArray, fileName);
        gridView = (GridView)findViewById(R.id.gridview);
        gridView.setAdapter(adapter);
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED
                , Uri.parse(Environment.getExternalStorageDirectory().toString()+"/diplomat")));

        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);
        }
    });
    }//if
    else
    {
        setContentView(R.layout.no_media);
    }
}//onCreate

public static Bitmap convertToBitmap(File file) 
{
    URL url = null;
    try 
    {
        url = file.toURL();
    } catch (MalformedURLException e1) 
    {
        //Log.d(TAG, e1.toString());
    }//catch

    Bitmap bmp = null;
    try
    {
       bmp = BitmapFactory.decodeStream(url.openStream());
       //bmp.recycle();
    }catch(Exception e)
    {
        //Log.d(TAG, "Exception: "+e.toString());
    }//catch
    return bmp;
}//convertToBitmap

public String readFileName(File file){
    String name = file.getName();
    return name;
}//readFileName
}//class

关于android - 在 GridView 中显示来自 SD 卡中特定文件夹的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10549417/

相关文章:

android - OutputStreamWriter 不追加

android - 我如何 adb 拉出 SD 卡中存在的文件夹的所有文件

android - 如何查找问题 Android SDK 3.0 错误 :(9, 5) 错误:找不到资源 android:attr/colorError

java - 如何让 getIntent() 在使用 Intent 集调用 Activity 后返回 null

android - java.io.File 无法转换为 org.gradle.api.artifacts.Configuration

android - 如何使用 Android Gradle 插件 3.0.0 将所有 flavor 变体发布到 Maven?

php - Yii2 GridView SqlDataprovider 排序不工作

c# - 在 ASP.NET GridView 中使用 C# 三元运算符

Android:GridView Adapter 需要使用异步任务下载和显示图像 - 太慢了

java - 将电影文件保存在特定文件夹中 -android-