【问题标题】:How to Pass Bitmap[] between 2 fragments如何在 2 个片段之间传递 Bitmap[]
【发布时间】:2017-08-25 17:14:39
【问题描述】:

我正在使用AsyncTaskurl 下载一些图像。下载的图片我保存在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;

}

在异步任务中

@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??

}

我缺少什么? 我是编程新手。 提前致谢。

【问题讨论】:

  • 从服务器下载图片请尝试使用毕加索
  • 你为什么要传递位图,你可以传递文件或 Uri,现在对于 android 7 你可以使用 FileProvider。

标签: java android arrays bitmap android-asynctask


【解决方案1】:

它是空的,因为你不知道 AsyncTask 是如何工作的

asyncTaskA.execute(urlArray);

所以 AsyncTask 开始了

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

您打开片段并要求图像 - 没有图像,所以您有 null

一段时间后,图像下载到这里。所以你有:

  1. 没有显示图像
  2. 内存泄漏

好方法是将图像的 url 传递给其他片段并使用 Picasso 或相同的库下载它。

如果您需要使用AsyncTask,您必须在onPostExecute 方法中打开片段。此外,如果您需要传递 Bitmap 变量,您可以将其设置为 Application 类或自定义单例或 Activity 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多