我想从android中的gridview获取所选图像的路径?i';我正在使用回收器处理这个gridview
我正在开发一个应用程序,其中选定的图像可以一次上载到服务器…为此,我需要获得一个数组中所有选定图像的路径,然后必须将此数组传递到上载活动…以便所有图像可以一个接一个地自动上载到服务器 这是我的适配器类 包com.akshay.nmiua我想从android中的gridview获取所选图像的路径?i';我正在使用回收器处理这个gridview,android,gridview,android-recyclerview,Android,Gridview,Android Recyclerview,我正在开发一个应用程序,其中选定的图像可以一次上载到服务器…为此,我需要获得一个数组中所有选定图像的路径,然后必须将此数组传递到上载活动…以便所有图像可以一个接一个地自动上载到服务器 这是我的适配器类 包com.akshay.nmiua import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.SparseBooleanArray; import andro
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import com.bumptech.glide.Glide ;
import com.technotalkative.multiphotoselect.R;
import java.util.ArrayList;
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MyViewHolder> {
private ArrayList<String> mImagesList;
private Context mContext;
private SparseBooleanArray mSparseBooleanArray;
public ImageAdapter(Context context, ArrayList<String> imageList) {
mContext = context;
mSparseBooleanArray = new SparseBooleanArray();
mImagesList = new ArrayList<String>();
this.mImagesList = imageList;
}
public ArrayList<String> getCheckedItems() {
ArrayList<String> mTempArry = new ArrayList<String>();
for(int i=0;i<mImagesList.size();i++) {
if(mSparseBooleanArray.get(i)) {
mTempArry.add(mImagesList.get(i));
}
}
return mTempArry;
}
@Override
public long getItemId(int position) {
return position;
}
CompoundButton.OnCheckedChangeListener mCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mSparseBooleanArray.put((Integer) buttonView.getTag(), isChecked);
}
};
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_multiphoto_item, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
String imageUrl = mImagesList.get(position);
Glide.with(mContext)
.load("file://"+imageUrl)
.centerCrop()
.placeholder(R.drawable.ic_launcher)
.error(R.drawable.ic_launcher)
.into(holder.imageView);
holder.checkBox.setTag(position);
holder.checkBox.setChecked(mSparseBooleanArray.get(position));
holder.checkBox.setOnCheckedChangeListener(mCheckedChangeListener);
}
@Override
public int getItemCount() {
return mImagesList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public CheckBox checkBox;
public ImageView imageView;
public MyViewHolder(View view) {
super(view);
checkBox = (CheckBox) view.findViewById(R.id.checkBox1);
imageView = (ImageView) view.findViewById(R.id.imageView1);
}
}
}
这是我的主要活动
package com.akshay.nmiua;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.technotalkative.multiphotoselect.R;
import java.util.ArrayList;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
public class MultiPhotoSelectActivity extends AppCompatActivity {
private ImageAdapter imageAdapter;
private static final int REQUEST_FOR_STORAGE_PERMISSION = 123;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_multi_photo_select);
populateImagesFromGallery();
}
public void btnChoosePhotosClick(View v){
ArrayList<String> selectedItems = imageAdapter.getCheckedItems();
if (selectedItems!= null && selectedItems.size() > 0) {
Toast.makeText(MultiPhotoSelectActivity.this, "Total photos selected: " + selectedItems.size(),
Toast.LENGTH_SHORT).show();
Log.d(MultiPhotoSelectActivity.class.getSimpleName(), "Selected Items: " + selectedItems.toString());
}
}
private void populateImagesFromGallery() {
if (!mayRequestGalleryImages()) {
return;
}
ArrayList<String> imageUrls = loadPhotosFromNativeGallery();
initializeRecyclerView(imageUrls);
}
private boolean mayRequestGalleryImages() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}
if (checkSelfPermission(READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
return true;
}
if (shouldShowRequestPermissionRationale(READ_EXTERNAL_STORAGE)) {
showPermissionRationaleSnackBar();
} else {
requestPermissions(new String[]{READ_EXTERNAL_STORAGE}, REQUEST_FOR_STORAGE_PERMISSION);
}
return false;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_FOR_STORAGE_PERMISSION: {
if (grantResults.length > 0) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
populateImagesFromGallery();
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, READ_EXTERNAL_STORAGE)) {
showPermissionRationaleSnackBar();
} else {
Toast.makeText(this, "Go to settings and enable permission", Toast.LENGTH_LONG).show();
}
}
}
break;
}
}
}
private ArrayList<String> loadPhotosFromNativeGallery() {
final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media.DATE_TAKEN;
Cursor imagecursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
null, orderBy + " DESC");
ArrayList<String> imageUrls = new ArrayList<String>();
for (int i = 0; i < imagecursor.getCount(); i++) {
imagecursor.moveToPosition(i);
int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);
imageUrls.add(imagecursor.getString(dataColumnIndex));
System.out.println("=====> Array path => "+imageUrls.get(i));
}
return imageUrls;
}
private void initializeRecyclerView(ArrayList<String> imageUrls) {
imageAdapter = new ImageAdapter(this, imageUrls);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),4);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.addItemDecoration(new ItemOffsetDecoration(this, R.dimen.item_offset));
recyclerView.setAdapter(imageAdapter);
}
private void showPermissionRationaleSnackBar() {
Snackbar.make(findViewById(R.id.button1), getString(R.string.permission_rationale),
Snackbar.LENGTH_INDEFINITE).setAction("OK", new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityCompat.requestPermissions(MultiPhotoSelectActivity.this,
new String[]{READ_EXTERNAL_STORAGE},
REQUEST_FOR_STORAGE_PERMISSION);
}
}).show();
}
}
package com.akshay.nmiua;
导入android.content.pm.PackageManager;
导入android.database.Cursor;
导入android.os.Build;
导入android.os.Bundle;
导入android.provider.MediaStore;
导入android.support.annotation.NonNull;
导入android.support.design.widget.Snackbar;
导入android.support.v4.app.ActivityCompat;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.DefaultItemAnimator;
导入android.support.v7.widget.GridLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.util.Log;
导入android.view.view;
导入android.widget.Toast;
导入com.technotalative.multiphotoselect.R;
导入java.util.ArrayList;
导入静态android.Manifest.permission.READ\u外部存储;
公共类MultiPhotoSelectActivity扩展了AppCompatActivity{
专用图像适配器;
私有静态最终整数请求,用于存储权限=123;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layout\u multi\u photo\u select);
从Gallery()中填充图像;
}
公共无效btnChoosePhotosClick(视图五){
ArrayList selectedItems=imageAdapter.getCheckedItems();
if(selectedItems!=null&&selectedItems.size()>0){
Toast.makeText(MultiPhotoSelectActivity.this,“选择的照片总数:”+selectedItems.size(),
吐司。长度(短)。show();
Log.d(MultiPhotoSelectActivity.class.getSimpleName(),“选定项:“+selectedItems.toString());
}
}
私有void populateImagesFromGallery(){
如果(!mayRequestGalleryImages()){
返回;
}
ArrayList imageUrls=loadPhotosFromNativeGallery();
初始化RecyclerView(图像URL);
}
私有布尔值MayRequestGalleryImage(){
if(Build.VERSION.SDK_INT0){
if(grantResults[0]==已授予PackageManager.权限){
从Gallery()中填充图像;
}否则{
if(ActivityCompat.shouldShowRequestPermissionRegulation(此,读取外部存储)){
showPermissionRationalAlessanckbar();
}否则{
Toast.makeText(这是“转到设置并启用权限”,Toast.LENGTH_LONG.show();
}
}
}
打破
}
}
}
私有ArrayList loadPhotosFromNativeGallery(){
最终字符串[]列={MediaStore.Images.Media.DATA,MediaStore.Images.Media.\u ID};
最终字符串orderBy=MediaStore.Images.Media.DATE\u;
游标imagecursor=managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,列,null,
null,orderBy+“DESC”);
ArrayList imageUrls=新建ArrayList();
对于(int i=0;i数组路径=>”+imageURL.get(i));
}
返回图像URL;
}
私有void初始化器RecyclerView(ArrayList imageUrls){
imageAdapter=新的imageAdapter(这是ImageURL);
RecycleView.LayoutManager LayoutManager=新的GridLayoutManager(getApplicationContext(),4);
RecyclerView RecyclerView=(RecyclerView)findViewById(R.id.recycler\u视图);
recyclerView.setLayoutManager(layoutManager);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.addItemDecoration(新的ItemOffsetDecoration(此,R.dimen.item_offset));
recyclerView.setAdapter(imageAdapter);
}
私有void showPermissionRationaleSnackBar(){
Snackbar.make(findviewbyd(R.id.button1)、getString(R.string.permission\u原理),
Snackbar.LENGTH\u unfinite).setAction(“确定”,新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
ActivityCompat.requestPermissions(MultiPhotoSelectActivity.this、,
新字符串[]{READ_EXTERNAL_STORAGE},
申请存储许可);
}
}).show();
}
}
那么问题出在哪里?你只描述了你想要的。你也没有描述你是如何实现所有这些的。你甚至没有解释用户将如何选择图像。那么问题是什么?你只描述了你想要的。你也没有描述你是如何实现的
package com.akshay.nmiua;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.technotalkative.multiphotoselect.R;
import java.util.ArrayList;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
public class MultiPhotoSelectActivity extends AppCompatActivity {
private ImageAdapter imageAdapter;
private static final int REQUEST_FOR_STORAGE_PERMISSION = 123;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_multi_photo_select);
populateImagesFromGallery();
}
public void btnChoosePhotosClick(View v){
ArrayList<String> selectedItems = imageAdapter.getCheckedItems();
if (selectedItems!= null && selectedItems.size() > 0) {
Toast.makeText(MultiPhotoSelectActivity.this, "Total photos selected: " + selectedItems.size(),
Toast.LENGTH_SHORT).show();
Log.d(MultiPhotoSelectActivity.class.getSimpleName(), "Selected Items: " + selectedItems.toString());
}
}
private void populateImagesFromGallery() {
if (!mayRequestGalleryImages()) {
return;
}
ArrayList<String> imageUrls = loadPhotosFromNativeGallery();
initializeRecyclerView(imageUrls);
}
private boolean mayRequestGalleryImages() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}
if (checkSelfPermission(READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
return true;
}
if (shouldShowRequestPermissionRationale(READ_EXTERNAL_STORAGE)) {
showPermissionRationaleSnackBar();
} else {
requestPermissions(new String[]{READ_EXTERNAL_STORAGE}, REQUEST_FOR_STORAGE_PERMISSION);
}
return false;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_FOR_STORAGE_PERMISSION: {
if (grantResults.length > 0) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
populateImagesFromGallery();
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, READ_EXTERNAL_STORAGE)) {
showPermissionRationaleSnackBar();
} else {
Toast.makeText(this, "Go to settings and enable permission", Toast.LENGTH_LONG).show();
}
}
}
break;
}
}
}
private ArrayList<String> loadPhotosFromNativeGallery() {
final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media.DATE_TAKEN;
Cursor imagecursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
null, orderBy + " DESC");
ArrayList<String> imageUrls = new ArrayList<String>();
for (int i = 0; i < imagecursor.getCount(); i++) {
imagecursor.moveToPosition(i);
int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);
imageUrls.add(imagecursor.getString(dataColumnIndex));
System.out.println("=====> Array path => "+imageUrls.get(i));
}
return imageUrls;
}
private void initializeRecyclerView(ArrayList<String> imageUrls) {
imageAdapter = new ImageAdapter(this, imageUrls);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),4);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.addItemDecoration(new ItemOffsetDecoration(this, R.dimen.item_offset));
recyclerView.setAdapter(imageAdapter);
}
private void showPermissionRationaleSnackBar() {
Snackbar.make(findViewById(R.id.button1), getString(R.string.permission_rationale),
Snackbar.LENGTH_INDEFINITE).setAction("OK", new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityCompat.requestPermissions(MultiPhotoSelectActivity.this,
new String[]{READ_EXTERNAL_STORAGE},
REQUEST_FOR_STORAGE_PERMISSION);
}
}).show();
}
}