2017-02-19 93 views
0

我有一個MultiplePhotoSelectActivity.java讓用戶選擇多張照片並將路徑存儲在ArrayList中。Android如何在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> selectedItemsimageAdapter

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:選定的項目:[/存儲/模擬/ 0 /圖片/ 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

@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中。當putExtra處於意圖中時,我懷疑是錯誤的,迄今爲止我嘗試過但仍然沒有什麼不同。

The answer of this Stackoverflow question

putParcelable or putSerializable like the answer

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

所以我需要知道,

1)我應該如何putExtra和getExtra中,爲了在這兩個活動的意圖發送和接收圖像的ArrayList?

2)是我的把手來顯示圖像是否正確?如果沒有,請告訴我,我做錯了。

編輯:嘗試爲阿斯拉姆Hossin解決 後,我想這

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

我有以下錯誤 this warning from android studio

回答

0

看一些文件我弄清楚後,我做了幾個錯誤

MultiPhotoSelectActivity.java 

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

我搞清楚了,有3個薄霧AKE在上面的代碼中,

1)MultiPhotoSelectActivity.java應該不是一個新的意圖,但它應該是數據發送回PreuploadActivity.java

2)I應的setResult這樣

setResult(Activity.RESULT_OK, data); 

3)根據到下面的文檔,所以我加finish()setResult()

數據只有一次你打電話給finish()。你需要在調用finish()之前調用setResult(),否則不會返回任何結果。

我通過類似下面

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結果碼的設置在PreuploadActivity.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(); 
    } 
} 
相關問題