Android 如何在gridview上获取单击图像的uri?
我有一个名为GalleryActivity.java的活动,它使用GridViewAdapter.java类将选定文件夹的图像加载到gridview中。单击此gridview上的图像时,我希望获取其uri并将其传递给另一个活动。但我不知道如何获取单击图像的uri 以下是GalleryActivity.java的代码:Android 如何在gridview上获取单击图像的uri?,android,image,gridview,uri,Android,Image,Gridview,Uri,我有一个名为GalleryActivity.java的活动,它使用GridViewAdapter.java类将选定文件夹的图像加载到gridview中。单击此gridview上的图像时,我希望获取其uri并将其传递给另一个活动。但我不知道如何获取单击图像的uri 以下是GalleryActivity.java的代码: import android.Manifest; import android.content.Intent; import android.content.pm.PackageM
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.Toast;
import java.util.ArrayList;
public class GalleryActivity extends AppCompatActivity {
public static ArrayList<Model_images> al_images = new ArrayList<>();
boolean boolean_folder;
Adapter_PhotosFolder obj_adapter;
GridView folder_gridview, gridView;
GridViewAdapter adapter;
ImageButton btnBack;
private int folder_gridview_slideout_position = 190;
private static final int REQUEST_PERMISSIONS = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
folder_gridview = (GridView)findViewById(R.id.gallery_gridview_folders);
gridView = (GridView)findViewById(R.id.gallery_gridview_photos);
// when gridview folder is clicked
folder_gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int int_position, long l) {
//load photos into gridview
adapter = new GridViewAdapter(getApplicationContext(),al_images,int_position);
gridView.setAdapter(adapter);
}
});
// when a photo on gridView is clicked
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
// Here is the part where I want to get uri of image
}
});
if ((ContextCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) && (ContextCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) {
if ((ActivityCompat.shouldShowRequestPermissionRationale(GalleryActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) && (ActivityCompat.shouldShowRequestPermissionRationale(GalleryActivity.this,
Manifest.permission.READ_EXTERNAL_STORAGE))) {
} else {
ActivityCompat.requestPermissions(GalleryActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_PERMISSIONS);
}
}else {
Log.e("Else","Else");
fn_imagespath();
}
}
// returns an array of images
public ArrayList<Model_images> fn_imagespath() {
al_images.clear();
int int_position = 0;
Uri uri;
Cursor cursor;
int column_index_data, column_index_folder_name;
String absolutePathOfImage = null;
uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.MediaColumns.DATA, MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
final String orderBy = MediaStore.Images.Media.DATE_TAKEN;
cursor = getApplicationContext().getContentResolver().query(uri, projection, null, null, orderBy + " DESC");
column_index_data = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
column_index_folder_name = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
while (cursor.moveToNext()) {
absolutePathOfImage = cursor.getString(column_index_data);
Log.e("Column", absolutePathOfImage);
Log.e("Folder", cursor.getString(column_index_folder_name));
for (int i = 0; i < al_images.size(); i++) {
if (al_images.get(i).getStr_folder().equals(cursor.getString(column_index_folder_name))) {
boolean_folder = true;
int_position = i;
break;
} else {
boolean_folder = false;
}
}
if (boolean_folder) {
ArrayList<String> al_path = new ArrayList<>();
al_path.addAll(al_images.get(int_position).getAl_imagepath());
al_path.add(absolutePathOfImage);
al_images.get(int_position).setAl_imagepath(al_path);
} else {
ArrayList<String> al_path = new ArrayList<>();
al_path.add(absolutePathOfImage);
Model_images obj_model = new Model_images();
obj_model.setStr_folder(cursor.getString(column_index_folder_name));
obj_model.setAl_imagepath(al_path);
al_images.add(obj_model);
}
}
for (int i = 0; i < al_images.size(); i++) {
Log.e("FOLDER", al_images.get(i).getStr_folder());
for (int j = 0; j < al_images.get(i).getAl_imagepath().size(); j++) {
Log.e("FILE", al_images.get(i).getAl_imagepath().get(j));
}
}
obj_adapter = new Adapter_PhotosFolder(getApplicationContext(),al_images);
folder_gridview.setAdapter(obj_adapter);
return al_images;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case REQUEST_PERMISSIONS: {
for (int i = 0; i < grantResults.length; i++) {
if (grantResults.length > 0 && grantResults[i] == PackageManager.PERMISSION_GRANTED) {
fn_imagespath();
} else {
Toast.makeText(GalleryActivity.this, "The app was not allowed to read or write to your storage. Please consider granting it this permission", Toast.LENGTH_LONG).show();
}
}
}
}
}
}
导入android.Manifest;
导入android.content.Intent;
导入android.content.pm.PackageManager;
导入android.database.Cursor;
导入android.net.Uri;
导入android.os.Bundle;
导入android.provider.MediaStore;
导入android.support.v4.app.ActivityCompat;
导入android.support.v4.content.ContextCompat;
导入android.support.v7.app.AppActivity;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.GridView;
导入android.widget.ImageButton;
导入android.widget.Toast;
导入java.util.ArrayList;
公共类GalleryActivity扩展了AppCompatActivity{
public static ArrayList al_images=new ArrayList();
布尔文件夹;
适配器(obj)适配器;;
GridView文件夹\u GridView,GridView;
GridViewAdapter;
图像按钮btnBack;
私有int文件夹\u网格视图\u滑出\u位置=190;
私有静态最终int请求_权限=100;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
文件夹\u gridview=(gridview)findViewById(R.id.gallery\u gridview\u文件夹);
gridView=(gridView)findViewById(R.id.gallery\u gridView\u照片);
//单击gridview文件夹时
文件夹_gridview.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共虚线单击(AdapterView AdapterView,视图视图,内部位置,长l){
//将照片加载到gridview
adapter=新的GridViewAdapter(getApplicationContext(),al_图像,int_位置);
setAdapter(适配器);
}
});
//单击gridView上的照片时
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
//这里是我想要获取图像uri的部分
}
});
如果((ContextCompat.checkSelfPermission)(getApplicationContext(),
Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.permission_grated)&(ContextCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.READ_EXTERNAL_STORAGE)!=PackageManager.permission_grated){
如果((ActivityCompat.shouldShowRequestPermissionRegulation)(GalleryActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE))&&(ActivityCompat.shouldShowRequestPermissionRegulation(GalleryActivity.this,
Manifest.permission.READ(外部存储){
}否则{
ActivityCompat.requestPermissions(GalleryActivity.this,
新字符串[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},
请求许可);
}
}否则{
Log.e(“其他”、“其他”);
fn_imagespath();
}
}
//返回图像数组
公共阵列列表fn_imagespath(){
al_images.clear();
int_位置=0;
Uri;
光标;
int列索引数据,列索引文件夹名称;
字符串AbsolutePathFimage=null;
uri=MediaStore.Images.Media.EXTERNAL\u CONTENT\u uri;
String[]projection={MediaStore.MediaColumns.DATA,MediaStore.Images.Media.BUCKET\u DISPLAY\u NAME};
最终字符串orderBy=MediaStore.Images.Media.DATE\u;
cursor=getApplicationContext().getContentResolver().query(uri、投影、null、null、orderBy+“DESC”);
column\u index\u data=cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.data);
column\u index\u folder\u name=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET\u DISPLAY\u name);
while(cursor.moveToNext()){
AbsolutePathFimage=cursor.getString(列索引数据);
Log.e(“列”,绝对图像);
Log.e(“Folder”,cursor.getString(column_index_Folder_name));
对于(int i=0;iimport android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import java.util.ArrayList;
public class GridViewAdapter extends ArrayAdapter<Model_images> {
Context context;
ViewHolder viewHolder;
ArrayList<Model_images> al_menu = new ArrayList<>();
int int_position;
public GridViewAdapter(Context context, ArrayList<Model_images> al_menu, int int_position) {
super(context, R.layout.adapter_photosfolder, al_menu);
this.al_menu = al_menu;
this.context = context;
this.int_position = int_position;
}
@Override
public int getCount() {
Log.e("ADAPTER LIST SIZE", al_menu.get(int_position).getAl_imagepath().size() + "");
return al_menu.get(int_position).getAl_imagepath().size();
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public int getViewTypeCount() {
if (al_menu.get(int_position).getAl_imagepath().size() > 0) {
return al_menu.get(int_position).getAl_imagepath().size();
} else {
return 1;
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(R.layout.adapter_photosfolder, parent, false);
viewHolder.tv_foldern = (TextView) convertView.findViewById(R.id.tv_folder);
viewHolder.tv_foldersize = (TextView) convertView.findViewById(R.id.tv_folder2);
viewHolder.iv_image = (ImageView) convertView.findViewById(R.id.iv_image);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tv_foldern.setVisibility(View.GONE);
viewHolder.tv_foldersize.setVisibility(View.GONE);
Glide.with(context).load("file://" + al_menu.get(int_position).getAl_imagepath().get(position))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(viewHolder.iv_image);
return convertView;
}
private static class ViewHolder {
TextView tv_foldern, tv_foldersize;
ImageView iv_image;
}
}
public class Model_images {
String str_folder;
ArrayList<String> al_imagepath;
public String getStr_folder() {
return str_folder;
}
public void setStr_folder(String str_folder) {
this.str_folder = str_folder;
}
public ArrayList<String> getAl_imagepath() {
return al_imagepath;
}
public void setAl_imagepath(ArrayList<String> al_imagepath) {
this.al_imagepath = al_imagepath;
}
}
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import java.util.ArrayList;
public class Adapter_PhotosFolder extends ArrayAdapter<Model_images> {
Context context;
ViewHolder viewHolder;
ArrayList<Model_images> al_menu = new ArrayList<>();
public Adapter_PhotosFolder(Context context, ArrayList<Model_images> al_menu) {
super(context, R.layout.adapter_photosfolder, al_menu);
this.al_menu = al_menu;
this.context = context;
}
@Override
public int getCount() {
Log.e("ADAPTER LIST SIZE", al_menu.size() + "");
return al_menu.size();
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public int getViewTypeCount() {
if (al_menu.size() > 0) {
return al_menu.size();
} else {
return 1;
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(R.layout.adapter_photosfolder, parent, false);
viewHolder.tv_foldern = (TextView) convertView.findViewById(R.id.tv_folder);
viewHolder.tv_foldersize = (TextView) convertView.findViewById(R.id.tv_folder2);
viewHolder.iv_image = (ImageView) convertView.findViewById(R.id.iv_image);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tv_foldern.setText(al_menu.get(position).getStr_folder());
viewHolder.tv_foldersize.setText(al_menu.get(position).getAl_imagepath().size()+"");
Glide.with(context).load("file://" + al_menu.get(position).getAl_imagepath().get(0))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(viewHolder.iv_image);
return convertView;
}
private static class ViewHolder {
TextView tv_foldern, tv_foldersize;
ImageView iv_image;
}
}
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int int_position, long l) {
Model_images modelImage = (Model_images) adapterView.getItemAtPosition(int_position);
Uri uri = modelImage.getAl_imagepath();
//From here you can send uri to next activity } });
}
public interface ImageClickListener{
void onClickImage(String url);
}
public YourActivity implements ImageClickListener