我需要将一个可绘制的(mDLlist.get(position).getImageId())从Fragment传递给DialogFragment。
我似乎找不到如何做到的方法,任何输入都会很棒。
先谢谢你。
...
FragmentManager ft = ((FragmentActivity)context1).getSupportFragmentManager();
DialogFragment newFragment = MyNotification.newInstance();
Bundle args = new Bundle();
// How to pass this value ?
args.put?("appdraw", mDLlist.get(position).getImageId());
//--//
args.putString("appname", (String)mDLlist.get(position).getLabelnameText());
args.putString("appversion", mDLlist.get(position).getVersionName());
args.putString("appinstalltime", "Downloaded");
newFragment.setArguments(args);
newFragment.show(ft, "mydialog");
...
答案 0 :(得分:2)
您无法通过Bundle传递Drawable
,因为它没有实现Serializable
,我认为您无法实现Parcelable
。
如果你的包装中已有一个Drawable,你可以传递一个字符串或资源ID,这样你就可以重新查找了。
如果是Bitmap,则需要将其写入本地存储并传递路径。
答案 1 :(得分:0)
如果有人遇到同样的问题,我会使用"解决方法"通过传递适配器的位置:
args.putInt("appdrawpos", position);
并将它与我在我写的方法中使用的计数器(i)进行比较:
int appDrawPos = 0;
Drawable drawIcon;
int i = 0;
...
//Get the adapter position
appDrawPos = getArguments().getInt("appdrawpos");
//Get apk icon
getAPKicon(folder.getAbsolutePath());
...
public void getAPKicon(String directoryName) {
File directory = new File(directoryName);
final PackageManager pm = getActivity().getPackageManager();
File[] fList = directory.listFiles();
for (File file : fList) {
if (file.isFile()) {
//If counter is the same as adapter position
//Grab the icon from the apk
if (i == appDrawPos)
if (file.getName().endsWith(".apk")) {
PackageInfo info = pm.getPackageArchiveInfo(file.getAbsolutePath(), 0);
info.applicationInfo.sourceDir = file.getAbsolutePath();
info.applicationInfo.publicSourceDir = file.getAbsolutePath();
drawIcon = (info.applicationInfo.loadIcon(pm));
appDrawPos = 0;
i = 0;
}
i++;
} else if (file.isDirectory()) {
getAPKicon(file.getAbsolutePath());
}
}
}