如何将一个图像选择案例与多个图像选择可用条件区分开来?

o2gm4chl  于 2021-07-12  发布在  Java
关注(0)|答案(0)|浏览(259)

我可以从图库中选择多个图像(最多4个)并在回收器视图中显示它们。
当我选择多个图像时,它工作得很好,但当我只选择一个图像时,它会给我 data.getClipdata()==null 案例结果。
这是我的活动代码:

  1. btnPlusImage.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. if (ActivityCompat.checkSelfPermission(PlusEventActivity.this,
  5. Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
  6. ActivityCompat.requestPermissions(PlusEventActivity.this,
  7. new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1000);
  8. }
  9. Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
  10. intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
  11. intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
  12. startActivityForResult(intent, GET_GALLERY_IMAGE);
  13. }
  14. });
  15. /.../
  16. } //On Create End
  17. @Override
  18. protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  19. super.onActivityResult(requestCode, resultCode, data);
  20. if (requestCode == GET_GALLERY_IMAGE && resultCode == RESULT_OK && data != null) {
  21. uriList = new ArrayList<>();
  22. if (data.getClipData() == null) {
  23. Toast.makeText(PlusEventActivity.this, "This device can't select multiple images", Toast.LENGTH_LONG).show();
  24. } else {
  25. ClipData clipData = data.getClipData();
  26. if (clipData.getItemCount() > 4) {
  27. Toast.makeText(PlusEventActivity.this, "Maximum 4 images can be selected", Toast.LENGTH_LONG).show();
  28. } else if (clipData.getItemCount() > 1 && clipData.getItemCount() <= 4) {
  29. for (int i = 0; i < clipData.getItemCount(); i++) {
  30. uriList.add(clipData.getItemAt(i).getUri());
  31. }
  32. } else if (clipData.getItemCount() == 1) {
  33. Toast.makeText(PlusEventActivity.this, "One image is selected", Toast.LENGTH_LONG).show();
  34. uriList.add(clipData.getItemAt(0).getUri());
  35. }
  36. }
  37. AdapterPlusEventImage adapter = new AdapterPlusEventImage(uriList, PlusEventActivity.this);
  38. rvEventImage.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
  39. rvEventImage.setAdapter(adapter);
  40. }
  41. }

我的适配器代码:

  1. public class AdapterPlusEventImage extends RecyclerView.Adapter<AdapterPlusEventImage.ItemViewHolder> {
  2. public ArrayList<Uri> eventImageList;
  3. public Context context;
  4. public AdapterPlusEventImage(ArrayList<Uri> eventImageList, Context context) {
  5. this.eventImageList = eventImageList;
  6. this.context = context;
  7. }
  8. @NonNull
  9. @Override
  10. public AdapterPlusEventImage.ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  11. Context context = parent.getContext();
  12. LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  13. View view = inflater.inflate(R.layout.item_plus_event_image, parent, false);
  14. AdapterPlusEventImage.ItemViewHolder viewHolder = new AdapterPlusEventImage.ItemViewHolder(view);
  15. return viewHolder;
  16. }
  17. @Override
  18. public void onBindViewHolder(@NonNull AdapterPlusEventImage.ItemViewHolder holder, int position) {
  19. holder.itemPlusEventImage.setImageURI(eventImageList.get(position));
  20. }
  21. @Override
  22. public int getItemCount() {
  23. return eventImageList.size();
  24. }
  25. public class ItemViewHolder extends RecyclerView.ViewHolder {
  26. ImageView itemPlusEventImage;
  27. public ItemViewHolder(@NonNull View itemView) {
  28. super(itemView);
  29. itemPlusEventImage = itemView.findViewById(R.id.itemPlusEventImage);
  30. }
  31. }
  32. }

当选择一个图像时,我想在“回收器”视图中显示该图像。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题