2017-06-15 1 views
0

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.

+0

Avez-vous accès à l'URI dans l'adaptateur? –

+0

Parce que si vous êtes sûr que les URI sont corrects cela devrait aider: https://stackoverflow.com/a/4717740/8160570 –

+0

Oui. Le textViewGrid montre fondamentalement le Uri en tant que/storage/.. –

Répondre

0

Vous pouvez le faire par ce code:

holder.imageViewGrid.setImageURI(null); 
holder.imageViewGrid.setImageURI(photo); 

tout premier set null pour le réinitialiser. Laissez-moi savoir le résultat

+0

Ça n'a pas marché. –

+0

/stockage/émulé/0/Screenshots/Screenshot_20170613-115540.png. C'est la valeur de Uri photo –

+0

Avez-vous vérifié votre Uri pour null et êtes-vous sûr que votre Uri est correct? – Meikiem