如何在2个片段之间传递Bitmap []

时间:2017-03-31 12:21:26

标签: java android arrays bitmap android-asynctask

我正在使用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(); } }); 。有人可以帮忙吗?

按下载按钮:

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

}

在MainFragment方法中:

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

    fragmentMain.getImages(bitmaps);

}

在AsyncTask中

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

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

}

目前在FragmentImages中

    private void MenuItemCallback(object sender, EventArgs e)
    {
        string message = string.Format(CultureInfo.CurrentCulture, "Inside {0}.MenuItemCallback()", this.GetType().FullName);
        string title = "EditFluxCommand";



        //var selectedItems = ((UIHierarchy)((DTE2)this.ServiceProvider.GetService(typeof(DTE))).Windows.Item("{3AE79031-E1BC-11D0-8F78-00A0C9110057}").Object).SelectedItems as object[];


        var dte = Package.GetGlobalService(typeof(SDTE)) as DTE;
        if (dte.SelectedItems.Count <= 0) return;

        foreach (SelectedItem selectedItem in dte.SelectedItems)
        {

            if (selectedItem.ProjectItem == null) return;
            var projectItem = selectedItem.ProjectItem;
            var fullPathProperty = projectItem.Properties.Item("FullPath");
            if (fullPathProperty == null) return;
            var fullPath = fullPathProperty.Value.ToString();

            //var mywindow = new EditFlux();


            //Show a message box to prove we were here
            VsShellUtilities.ShowMessageBox(
                this.ServiceProvider,
                fullPath,
                title,
                OLEMSGICON.OLEMSGICON_INFO,
                OLEMSGBUTTON.OLEMSGBUTTON_OK,
                OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);
        }
    }

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

1 个答案:

答案 0 :(得分:0)

它为null因为您不知道如何使用AsyncTask

asyncTaskA.execute(urlArray);

AsyncTask开始了

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

您打开片段并要求提供图片 - 没有图片,因此您有null

经过一段时间后,这里下载了图片。所以你有:

  1. 没有图片显示
  2. 内存泄漏
  3. 好方法是将图片的url传递给其他片段并使用Picasso或相同的库下载。

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