【问题标题】:Android how to display image in Arraylist which intent from another activity?Android如何在Arraylist中显示来自另一个活动的意图的图像?
【发布时间】:2017-02-19 13:31:29
【问题描述】:

我有一个MultiplePhotoSelectActivity.java,它可以让用户选择多张照片并将路径存储在一个 ArrayList 中。

 public void btnChoosePhotosClick(View v){

    ArrayList<String> selectedItems = imageAdapter.getCheckedItems();

    if (selectedItems!= null && selectedItems.size() > 0) {
        //Toast.makeText(MultiPhotoSelectActivity.this, "Total photos selected: " + selectedItems.size(), Toast.LENGTH_SHORT).show();
        Log.d(MultiPhotoSelectActivity.class.getSimpleName(), "Selected Items: " + selectedItems.toString());
        Intent intent = new Intent(MultiPhotoSelectActivity.this,PreuploadActivity.class);
        intent.putStringArrayListExtra("selectedItems", selectedItems);
        setResult(RESULT_OK, intent);
        startActivity(intent);
    }
}

这是ArrayList&lt;String&gt; selectedItems来自imageAdapter

ArrayList<String> getCheckedItems() {
        ArrayList<String> mTempArry = new ArrayList<>();

        for(int i=0;i<mImagesList.size();i++) {
            if(mSparseBooleanArray.get(i)) {
                mTempArry.add(mImagesList.get(i));
            }
        }

        return mTempArry;
    }

用户选择照片后,logcat中会出现如下结果

d / MultiPhotoSelectActivity:选定的项目:[/storage/emulated/0/Pictures/Screenshot_1486795867.png,/storage/emulated/0/Pictures/15592639_1339693736081458_1539667284_n.jpg,/storage/emulated/0/15592639_1339693736081458_1539667284_n.jpg]

现在的问题是,我想在用户选择图像后使用数组列表中的文件路径在我的另一个活动中显示图像

这里是PreuploadActivity.java,应该接收意图数据。 这是让用户在MultiplePhotoSelectActivity.java中选择照片的按钮

//this button will open gallery,and select photo
    addPhoto.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(PreuploadActivity.this,MultiPhotoSelectActivity.class);
            startActivityForResult(intent,PICK_IMAGE_REQUEST);
        }
    });

这是onActivityResult(),应该从MultiplePhotoSelectActivity.java接收Intent数据

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data.getData() !=null){

        ArrayList<String> selectedItems = data.getStringArrayListExtra("selectedItems");

        for(String selectedItem : selectedItems){

            Uri filePath = Uri.parse(selectedItem);


            try{
                // bimatp factory
                BitmapFactory.Options options = new BitmapFactory.Options();

                options.inSampleSize = 8;

                bitmap = BitmapFactory.decodeFile(filePath.getPath(),
                        options);


                //Setting image to ImageView
                ImageView imageView = new ImageView(getApplicationContext());
                LinearLayout.LayoutParams layoutParams =
                        new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                ViewGroup.LayoutParams.MATCH_PARENT);
                imageView.setLayoutParams(layoutParams);
                imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
                imageView.setPadding(0, 0, 0, 10);
                imageView.setAdjustViewBounds(true);
                imageView.setImageBitmap(bitmap);

                linearMain.addView(imageView);

            }catch (Exception e) {
                e.printStackTrace();

            }


        }

所以现在在PreuploadActivity.javaonActivityResult() 中,我无法显示从MultiplePhotoSelectActivity.java 发送的ArrayList 中的图像。我怀疑在意图中放置Extra 时有问题,到目前为止我尝试过但仍然没有什么不同。

The answer of this Stackoverflow question

putParcelable or putSerializable like the answer

How to transfer a Uri image from one activity to another?

所以我需要知道的,

1)我应该如何在两个Activity的intent中放入Extra和getExtra,以便发送和接收图像的ArrayList?

2) 我显示图像的句柄是否正确?如果不是,请告诉我我做错了什么。

编辑:尝试 Aslam Hossin 解决方案 在我尝试了这个之后

ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("selectedItems ");

我收到以下错误

【问题讨论】:

    标签: java android image android-intent arraylist


    【解决方案1】:

    看了一些文档后,我发现我犯了一些错误

    MultiPhotoSelectActivity.java
    
    Intent intent = new Intent(MultiPhotoSelectActivity.this,PreuploadActivity.class);
        intent.putStringArrayListExtra("selectedItems", selectedItems);
        setResult(RESULT_OK, intent);
        startActivity(intent);
    

    我发现,上面的代码有3个错误,

    1)MultiPhotoSelectActivity.java 中不应有新意图,但应将数据发送回PreuploadActivity.java

    2) 我应该这样设置结果

    setResult(Activity.RESULT_OK, data);
    

    3)根据下面的文档,我在setResult()之后添加finish()

    只有在调用finish() 后才会返回数据。在调用finish()之前需要调用setResult(),否则不会返回结果。

    我通过在PreuploadActivity.java 中设置结果代码来解决它,如下所示

     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            if(requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK ){
           //setting Activity.RESULT_OK  
    
    
                ArrayList<String> selectedItems = data.getStringArrayListExtra("selectedItems");
    

    我是MultiPhotoSelectActivity.java我做了以下改动

        ArrayList<String> selectedItems = imageAdapter.getCheckedItems();
    
        if (selectedItems!= null && selectedItems.size() > 0) {
            //Toast.makeText(MultiPhotoSelectActivity.this, "Total photos selected: " + selectedItems.size(), Toast.LENGTH_SHORT).show();
            Log.d(MultiPhotoSelectActivity.class.getSimpleName(), "Selected Items: " + selectedItems.toString());
            final Intent data = new Intent();
            data.putStringArrayListExtra("selectedItems", selectedItems);
            setResult(Activity.RESULT_OK, data);
            finish();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多