簡體   English   中英

Android如何在Arraylist中顯示圖像來自另一個活動的意圖?

[英]Android how to display image in Arraylist which intent from another activity?

我有一個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<String> 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.java onActivityResult() ,我無法顯示從MultiplePhotoSelectActivity.java發送的ArrayList中的圖像。我懷疑將putExtra放入意圖時出現了問題,到目前為止,我仍然嘗試過,但仍沒有不同。

這個Stackoverflow問題的答案

putParcelable或putSerializable就像答案

如何將Uri圖像從一項活動轉移到另一項活動?

所以我需要知道的是

1)我應該如何在兩個Activity中放置putExtra和getExtra,以便發送和接收圖像的ArrayList?

2)顯示圖像的手柄是否正確?如果不正確,請告訴我我做錯了什么。

編輯:嘗試了Aslam Hossin解決方案后,我嘗試了

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

我收到以下錯誤 來自Android Studio的警告

查看一些文檔后,我發現我犯了一些錯誤

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() setResult()

僅在調用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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM