Bon le problème est que je sélectionne plusieurs images et que j'ai besoin d'afficher toutes les images sélectionnées dans une autre vue recycleur d'activité (vue grille). J'ai eu les chemins d'Uri (chaîne Tried aussi bien) dans la première activité.Définir un ImageView dans un ViewHolder obtenir Uri List à partir d'une autre activité
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
try {
// When an Image is picked
if (requestCode == SELECT_PICTURE_MULTIPLE && resultCode == RESULT_OK
&& null != data) {
// Get the Image from data
String[] filePathColumn = { MediaStore.Images.Media.DATA };
imagesEncodedList = new ArrayList<Uri>();
if(data.getData()!=null){
Uri mImageUri=data.getData();
// Get the cursor
Cursor cursor = getContentResolver().query(mImageUri,
filePathColumn, null, null, null);
// Move to first row
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
imageEncoded = Uri.parse(cursor.getString(columnIndex));
imagesEncodedList.add(imageEncoded);
cursor.close();
}else {
if (data.getClipData() != null) {
ClipData mClipData = data.getClipData();
ArrayList<Uri> mArrayUri = new ArrayList<Uri>();
for (int i = 0; i < mClipData.getItemCount(); i++) {
ClipData.Item item = mClipData.getItemAt(i);
Uri uri = item.getUri();
mArrayUri.add(uri);
// Get the cursor
Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null);
// Move to first row
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
imageEncoded = Uri.parse(cursor.getString(columnIndex));
imagesEncodedList.add(imageEncoded);
cursor.close();
}
Log.v("LOG_TAG", "Selected Images" + mArrayUri.size());
}
}
} else {
Toast.makeText(this, "You haven't picked Image",
Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG)
.show();
}
super.onActivityResult(requestCode, resultCode, data);
}
Et dans l'activité Deuxièmement, je reçois le uri
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
images=new ArrayList<Uri>();
images=(ArrayList) getIntent().getSerializableExtra("IMAGES_LIST");
RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recyclerViewGrid);
recyclerView.setLayoutManager(new GridLayoutManager(this,2));
recyclerViewAdapter = new RecyclerViewAdapter(images,this);
recyclerView.setAdapter(recyclerViewAdapter);
}
Le RecyclerViewAdapter est:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.PhotoHolder> {
private Context context;
private ArrayList<Uri> photos;
public RecyclerViewAdapter(ArrayList<Uri> photos,Context context){
this.photos=photos;
this.context=context;
}
@Override
public PhotoHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.photo_grid,parent,false);
PhotoHolder photoHolder = new PhotoHolder(view);
return photoHolder;
}
@Override
public void onBindViewHolder(PhotoHolder holder, int position) {
Uri photo = photos.get(position);
String path = photo.getPath();
File sd = Environment.getExternalStorageDirectory();
File image = new File(path);
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions);
//bitmap = Bitmap.createScaledBitmap(bitmap,parent.getWidth(),parent.getHeight(),true);
holder.imageViewGrid.setImageBitmap(bitmap);
holder.textViewGrid.setText(photo+"");
}
@Override
public int getItemCount() {
return this.photos.size();
}
public class PhotoHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public ImageView imageViewGrid;
public TextView textViewGrid;
public PhotoHolder(View itemView) {
super(itemView);
imageViewGrid = (ImageView)itemView.findViewById(R.id.imageViewGrid);
textViewGrid = (TextView)itemView.findViewById(R.id.textViewGrid);
}
@Override
public void onClick(View view) {
}
}
}
Maintenant, même si je le chemin de la vue de l'image ne reçoit pas l'image . J'ai essayé Picasso, Glide et presque toutes les options possibles que je pouvais concevoir. Vous n'avez toujours pas trouvé l'erreur. Toute aide sera appréciée.
Avez-vous accès à l'URI dans l'adaptateur? –
Parce que si vous êtes sûr que les URI sont corrects cela devrait aider: https://stackoverflow.com/a/4717740/8160570 –
Oui. Le textViewGrid montre fondamentalement le Uri en tant que/storage/.. –