2017-03-31 79 views
1

我使用AsyncTask來從url下載一些圖像。下載的圖像我保存在Bitmap array。一旦他們被保存,我不知道如何將他們從一個fragment傳遞給另一個。有人可以幫忙嗎?如何在兩個片段之間傳遞位圖[]

按下載按鈕:

d.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String [] urlArray = new String[]{URL_IMAGE_1, URL_IMAGE_2,URL_IMAGE_3,URL_IMAGE_4, URL_IMAGE_5}; 
      asyncTaskA.execute(urlArray); 
      FrameLayout frameLayout = (FrameLayout)getView().findViewById(R.id.fragmentMain); 
      frameLayout.removeAllViewsInLayout(); 
      FragmentTransaction ft = getChildFragmentManager().beginTransaction(); 
      FragmentImages fragmentImages = new FragmentImages(); 
      ft.replace(R.id.fragmentMain,fragmentImages); 
      ft.addToBackStack(null); 
      ft.commit(); 
     } 
    }); 

在MainFragment方法:

public void getImages(Bitmap [] bitmaps){ 
    imagesDownloaded = bitmaps;//private Bitmap [] imagesDownloaded; 
    images = imageDownloaded; //public stati Bitmap [] images; 

} 

在的AsyncTask

@Override 
protected void onPostExecute(Bitmap[] bitmaps) { 

    fragmentMain.getImages(bitmaps); 

} 

在FragmentImages到目前爲止

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    Bitmap[] bitmaps = FragmentA.images; // The array is null, why?? 

} 

什麼即時消失? 林新編程。 在此先感謝。

+0

從服務器下載圖像請嘗試使用picasso –

+0

爲什麼你傳遞位圖,你可以傳遞文件或Uri,現在對於android 7你可以使用FileProvider。 –

回答

0

其空,因爲你不知道如何的AsyncTask工作

asyncTaskA.execute(urlArray); 

所以的AsyncTask開始

 FragmentImages fragmentImages = new FragmentImages(); 
     ft.replace(R.id.fragmentMain,fragmentImages); 
     ft.addToBackStack(null); 
     ft.commit(); 

您打開片段,並要求圖像 - 沒有圖像,讓您擁有null

經過一段時間的圖像下載到這裏。所以,你必須:

  1. 沒有影像diplayed
  2. 內存泄漏

好方法是通過圖像的URL到其他片段並用Picasso或同一庫下載。

如果您需要使用AsyncTask您必須在onPostExecute方法中打開片段。另外,如果您需要通過Bitmap變量,則可以將其設置爲Application班級或自定義單身人士或Activity班級。

相關問題