我是Android应用程序制作的新手,我仍然是一个有点知识的初学者。我一直在尝试制作一个像画廊一样工作的Android应用程序,但它只显示特定文件夹下的图像。对于用户界面,我开始只使用GridView
(或TwoWayGridView
从后者派生而来),并且一直试图让这个GridView
从此文件夹中获取其内容。< / p>
我制作了这个文件夹并将图像复制到它进行测试并失败了。没有显示图片.Plus我对Cursors
和ListAdapters
不太熟悉。我确定正确的事情是活动的权限,清单和布局。此外,我相信我的问题在于URI
。请检查下面的代码:
一些诽谤:
Uri contentUri;
Cursor mImageCursor;
TwoWayGridView mImageGrid;
ListAdapter mAdapter;
String sdCard = Environment.getExternalStorageDirectory().getAbsolutePath();
onCreate方法:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
File motherDirectory = new File(sdCard+"/Favory");
if(!motherDirectory.exists()){
motherDirectory.mkdir();
}
MediaScannerConnection.scanFile(this, new String[]{motherDirectory.getAbsolutePath()} ,null, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
// TODO Auto-generated method stub
contentUri = uri ;
initGrid(uri);
}
});
}
initGrid(Uri)方法:
private void initGrid(Uri folderUri) {
mImageCursor = this.getContentResolver().query(folderUri,
ImageThumbnailAdapter.IMAGE_PROJECTION, null, null,
MediaStore.Images.ImageColumns.DISPLAY_NAME);
mImageGrid = (TwoWayGridView) findViewById(R.id.gridview);
mAdapter = new ImageThumbnailAdapter(this, mImageCursor);
mImageGrid.setAdapter(mAdapter);
mImageGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(TwoWayAdapterView<?> parent, View v, int position, long id) {
Log.i(TAG, "showing image: " + mImageCursor.getString(ImageThumbnailAdapter.IMAGE_NAME_COLUMN));
Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
});
}
感谢您的帮助,如果有更简单的替代方法,请告诉我,我比现在的方法更关心结果。如果您需要任何信息或更多信息,请在下面的评论中告诉我。再次感谢!
答案 0 :(得分:4)
要阅读文件夹的文件,您可以使用此功能(来自this帖子):
String directoryName = Environment.getExternalStorageDirectory().toString()+"/YourFolder/";
public ArrayList<File> listf(String directoryName, ArrayList<File> files) {
File directory = new File(directoryName);
// get all the files from a directory
File[] fList = directory.listFiles();
for (File file : fList) {
Log.e("path : "," "+file);
if (file.isFile()) {
files.add(file);
} else if (file.isDirectory()) {
listf(file.getAbsolutePath(), files);
}
}
return files;
}
然后你应该把这个文件列表加载到你的GridView适配器,我建议你使用Universal Image Loader
您只需在该位置提供文件路径和Adapter ImageVIew
loadImageUtil.loadBitmapToImageView(imageView, youArrayList.get(position));
有关如何使用此库的更多信息,您可以看到示例,网格视图中有一个示例gridView