我正在开发一个应用程序,其中一次可以将选定的图像上传到服务器...为此我需要获取数组中所有选定图像的路径,然后必须将此数组传递给上传活动...以便所有图片可以自动逐个上传到服务器....
这是我的适配器类
包com.akshay.nmiua;
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);
}
}
}
这是我的itemoffset类..
package com.akshay.nmiua;
import android.content.Context;
import android.graphics.Rect;
import android.support.annotation.DimenRes;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
public class ItemOffsetDecoration extends RecyclerView.ItemDecoration {
private int mItemOffset;
public ItemOffsetDecoration(int itemOffset) {
mItemOffset = itemOffset;
}
public ItemOffsetDecoration(@NonNull Context context, @DimenRes int itemOffsetId) {
this(context.getResources().getDimensionPixelSize(itemOffsetId));
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.set(mItemOffset, mItemOffset, mItemOffset, mItemOffset);
}
}
这是我的主要活动..
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();
}
}