2017-03-31 81 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班级。

相关问题