我正在使用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();
}
});
。有人可以帮忙吗?
按下载按钮:
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);
}
}
我缺少什么? 我是编程新手。 提前谢谢。
答案 0 :(得分:0)
它为null因为您不知道如何使用AsyncTask
asyncTaskA.execute(urlArray);
AsyncTask开始了
FragmentImages fragmentImages = new FragmentImages ();
ft.replace(R.id.fragmentMain,fragmentImages );
ft.addToBackStack(null);
ft.commit();
您打开片段并要求提供图片 - 没有图片,因此您有null
经过一段时间后,这里下载了图片。所以你有:
好方法是将图片的url传递给其他片段并使用Picasso
或相同的库下载。
如果您需要使用AsyncTask
,则必须使用onPostExecute
方法打开片段。此外,如果您需要传递Bitmap
变量,可以将其设置为Application
类或自定义单例或例如Activity
类。