java - Installed application list doesn't show icon in the list in android -
i trying list of installed application in android device. here code in launcher app:
package com.powergroupbd.appfilter; import java.util.arraylist; import java.util.iterator; import java.util.list; import android.app.activity; import android.content.pm.packageinfo; import android.content.pm.packagemanager; import android.graphics.drawable.drawable; import android.os.bundle; import android.util.log; import android.widget.arrayadapter; import android.widget.listview; public class applicationfilteractivity extends activity { /** called when activity first created. */ listview appfilter; // arrayadapter<applications> adapter; packagemanager pck; private arraylist<applications> results = new arraylist<applications>(); @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); appfilter = (listview) findviewbyid(r.id.lvapp); packagemanager packagemanager = this.getpackagemanager(); list<packageinfo> applist = packagemanager.getinstalledpackages(0); iterator<packageinfo> = applist.iterator(); while (it.hasnext()) { packageinfo pk = (packageinfo) it.next(); // if(packagemanager.permission_granted==packagemanager.checkpermission(manifest.permission.access_fine_location, // pk.packagename) && // packagemanager.permission_granted==packagemanager.checkpermission(manifest.permission.access_coarse_location, // pk.packagename)) //checking if package having internet // permission // { results.add(get(pk.applicationinfo.loadicon(getpackagemanager()), ""+pk.applicationinfo.loadlabel(packagemanager))); log.i("appname", ""+pk.applicationinfo.loadlabel(packagemanager)); // } } // collections.sort(results, new comparator<applications>() { // @override // public int compare(applications c1, applications c2) { // return c1.getappname().comparetoignorecase(c2.getappname()); // } // }); appfilter.setadapter(new arrayadapter<applications>(this, android.r.layout.simple_list_item_1, results)); } private applications get(drawable icon, string appname) { return new applications(icon, appname); } } my custom adapter class here:
package com.powergroupbd.appfilter; import java.util.list; import android.app.activity; import android.graphics.color; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.arrayadapter; import android.widget.imageview; import android.widget.textview; public class customarrayadapter extends arrayadapter<applications> { private final list<applications> list; private final activity context; public customarrayadapter(activity context, list<applications> list) { super(context, r.layout.row, list); this.context = context; this.list = list; } static class viewholder { protected imageview icon; protected textview appame; } @override public view getview(int position, view convertview, viewgroup parent) { view view = null; if (convertview == null) { layoutinflater inflator = context.getlayoutinflater(); view = inflator.inflate(r.layout.row, null); final viewholder viewholder = new viewholder(); viewholder.icon = (imageview) view.findviewbyid(r.id.ivicon); viewholder.appame = (textview) view.findviewbyid(r.id.tvappname); viewholder.appame.settextcolor(color.white); view.settag(viewholder); } else { view = convertview; } viewholder holder = (viewholder) view.gettag(); holder.icon.setimagedrawable(list.get(position).geticon()); holder.appame.settext(list.get(position).getappname()); return view; } } and here applications class:
package com.powergroupbd.appfilter; import android.graphics.drawable.drawable; public class applications { private drawable icon; private string appname; public applications(drawable icon, string appname) { this.icon = icon; this.appname = appname; } public drawable geticon() { return icon; } public void seticon(drawable icon) { this.icon = icon; } public string getappname() { return appname; } public void setappname(string appname) { this.appname = appname; } } finally manifest is:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.powergroupbd.appfilter" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".applicationfilteractivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest> if run program, shows list of garbage string value(com.powergroupbd.appfilter.applications@44297...) without icon.
how can fix it?
you'll need override applications class
so add applications.java file:
public string tostring(){ return appname; } that make tostring call return name of application instance, instead of memory address. can add whatever information returned string within method.
edit:
change line:
appfilter.setadapter(new arrayadapter<applications>(this, android.r.layout.simple_list_item_1, results)); to this:
appfilter.setadapter(new customarrayadapter(this, results)); //<-- should camelcase name of adapter class.
Comments
Post a Comment