使用Bundle

时间:2017-11-16 19:13:51

标签: android android-fragments bundle drawable

我需要将一个可绘制的(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");
...

2 个答案:

答案 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());
            }
        }
    }