2017-06-15 60 views
0

好的问题是我选择了多个图像,并且必须在另一个活动的回收站视图(网格视图)中显示所有选定的图像。我在第一次活动中获得了Uri路径(尝试过的字符串)。在ViewHolder中设置ImageView从另一个活动获取Uri列表

@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); 
} 

而在第二个活动我收到的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); 
} 

的RecyclerViewAdapter是:

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) { 

    } 
} 
} 

现在,即使我有图像的观点并没有得到图片的路径。我尝试过毕加索,滑翔,以及几乎所有我可以想象的可能选择。仍然没有找到错误。 任何帮助将不胜感激。

+0

您是否有权访问适配器中的URI? –

+0

因为如果你确定URI是正确的,这应该有所帮助: https://stackoverflow.com/a/4717740/8160570 –

+0

是的。该textViewGrid基本上显示的Uri作为/存储/ .. –

回答

0

你可以做到这一点通过这个代码:

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

只是第一套空重置。

让我知道结果

+0

它没有工作。 –

+0

/storage/emulated/0/Screenshots/Screenshot_20170613-115540.png。这是Uri的照片的价值 –

+0

你检查过你的Uri为null吗?你确定你的Uri是正确的吗? – Meikiem

相关问题