【问题标题】:maximum image selection limit from gallery Android来自图库 Android 的最大图像选择限制
【发布时间】:2016-02-09 20:27:38
【问题描述】:

我正在尝试从我的应用程序内部获取 Gallery 内置应用程序中的图像 Uri。

所以,我使用了下面的 Intent,但它选择了更多图像。

我想设置限制。小于 3

@Override
public void onClick(View v) {
    Intent intent = new Intent( );
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    startActivityForResult(Intent.createChooser(intent, "select images"), PICK_IMAGE_MULTIPLE);
}

我该如何解决这个问题。

你有什么建议吗?

【问题讨论】:

    标签: android android-intent android-gallery


    【解决方案1】:

    不幸的是,正如http://developer.android.com/reference/android/content/Intent.html#EXTRA_ALLOW_MULTIPLE 所述,这是不可能的。

    这是一个额外的布尔值;默认为假。如果为 true,则允许实现向用户呈现 UI,用户可以在其中选择多个项目,这些项目全部返回给调用者。

    您必须手动检查返回的数据以查看它是否超过 3 项,如果是,请显示 Toast 并让他们重试。

    【讨论】:

    • 无解的答案怎么能有9分?
    【解决方案2】:

    正如 Daniel 所说,Intent.EXTRA_ALLOW_MULTIPLE 是不可能的。不过,另一种方法是使用 MultipleImageSelect 库。您不仅可以选择多张图片,还可以对用户选择的图片设置限制。

    查看repositorysample

    步骤:

    第 1 步: 像这样将 MultipleImageSelect 库和 jitpack.io 添加到你的 build.gradle 中:

    repositories {
      maven {
        url "https://jitpack.io"
      }
    }
    
    dependencies {
      implementation 'com.github.darsh2:MultipleImageSelect:v0.0.4'
    }
    

    第 2 步: 在项目的 AndroidManifest.xml 中,在 application 节点下添加以下内容:

    <activity
      android:name="com.darsh.multipleimageselect.activities.AlbumSelectActivity"
      android:theme="@style/MultipleImageSelectTheme">
      <intent-filter>
         <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
    </activity>
    

    第 3 步: 在要调用图像选择器的 Activity 中,按如下方式创建 Intent:

    mSelectImagesBtn.setOnClickListener(view -> {
            Intent intent = new Intent(ListingImages.this, AlbumSelectActivity.class);
            intent.putExtra(Constants.INTENT_EXTRA_LIMIT, 3); //set desired image limit here
            startActivityForResult(intent, Constants.REQUEST_CODE);
        });
    

    第 4 步: 并像这样覆盖 onActivityResult:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == Constants.REQUEST_CODE && resultCode == RESULT_OK && data !=null) {
            ArrayList<Image> images =data.getParcelableArrayListExtra(Constants.INTENT_EXTRA_IMAGES);
            imagePathList.clear();
           StringBuffer stringBuffer = new StringBuffer();
           
           //loop to retrieve the paths of each image and display to TextView
           for (int i = 0; i < images.size(); i++) {
                stringBuffer.append(images.get(i).path + "\n");
           }
            textView.setText(stringBuffer.toString());
        }
    }
    

    完成

    或者,

    如果您使用适配器来膨胀图像以显示,则可以改为:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == Constants.REQUEST_CODE && resultCode == RESULT_OK && data != null) {
            ArrayList<Image> images = data.getParcelableArrayListExtra(Constants.INTENT_EXTRA_IMAGES);
            imagePathList.clear();
            for (int i = 0; i < images.size(); i++) {
                imagePathList.add(images.get(i).path);
            }
            imageAdapter.notifyDataSetChanged();
        }
    }
    

    在 ImageAdapter 中,显示图像以填充 recyclerView,如下所示:

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        String path = imagePathList.get(position);
        Picasso.with(mContext)
                .load(new File(path))
                .placeholder(R.drawable.ic_house_placeholder)
                .into(holder.image);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-25
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      相关资源
      最近更新 更多