显示已安装应用的图标列表

时间:2014-12-16 16:08:30

标签: android

我正在制作一项活动,以在设备上显示已安装的应用及其图标的列表。 我按照这里的说明进行了操作:http://www.androidsnippets.com/get-installed-applications-with-name-package-name-version-and-icon。 然后我为返回的ArrayList设置了ListAdapter,但我得到的就是这个 http://farm9.staticflickr.com/8677/16010593916_0f5c237348_b.jpg (这是我的班级名称和活动名称) 这是代码

public class ShortcutsActivity extends ListActivity {

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    ArrayList<PInfo> packages = getPackages();

    setListAdapter(new ArrayAdapter<PInfo>(this, android.R.layout.simple_list_item_1, packages));
}

class PInfo {
    private String appname = "";
    private String pname = "";
    private String versionName = "";
    private int versionCode = 0;
    private Drawable icon;     
}

private ArrayList<PInfo> getPackages() {
    ArrayList<PInfo> apps = getInstalledApps(false); /* false = no system packages */
    return apps;
}

private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) {
    ArrayList<PInfo> res = new ArrayList<PInfo>();        
    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
    for(int i=0;i<packs.size();i++) {
        PackageInfo p = packs.get(i);
        if ((!getSysPackages) && (p.versionName == null)) {
            continue ;
        }
        PInfo newInfo = new PInfo();
        newInfo.appname = p.applicationInfo.loadLabel(getPackageManager()).toString();
        newInfo.pname = p.packageName;
        newInfo.versionName = p.versionName;
        newInfo.versionCode = p.versionCode;
        newInfo.icon = p.applicationInfo.loadIcon(getPackageManager());
        res.add(newInfo);
    }
    return res; 
}

} 难道我做错了什么? 对于这个可能重复的问题很抱歉,但我已经搜索了答案,但是在获得ArrayList后我似乎不知道该怎么做,因为我是新手到Android,还有很多东西要学习。

2 个答案:

答案 0 :(得分:0)

目前在你的TextView中(我猜你的android.R.layout.simple_list_item_1包含一个TextView)你可能正在将Text设置为你的PInfo对象.toString()。

由于您的自定义类没有覆盖toString() - 方法Android / Java不知道要显示什么,并显示默认实现,即:

getClass().getName() + '@' + Integer.toHexString(hashCode())

要使listitem显示您的信息,您必须覆盖toString() - PInfo中的方法:

@Override
public String toString(){
    return appname + ", " + pname + ", " + versionName + "(" + versionCode + ")";
}

这当然只是一个例子,只是实现良好布局的第一步。

根据官方Java文档,您的toString() - 方法应该如下:

  

返回对象的字符串表示形式。通常,toString方法返回一个&#34;文本表示&#34;的字符串。这个对象。结果应该是一个简洁但信息丰富的表示,便于人们阅读。建议所有子类都重写此方法。

答案 1 :(得分:-1)