0

好的,首先,我大约 2 天前开始(尝试)学习 Java。我试图制作一个列出所有已安装应用程序(activityInfo.loadLabel)的应用程序,并且我想在项目单击时启动应用程序(activityInfo.packageName)我将这些存储在 AppItems 列表中

class AppItem{
    String _appname;
    public String getAppname(){return _appname;};
    public void setAppname(String value){_appname = value;};
    String _app;
    public String getApp(){ return _app; };
    public void setApp(String value){_app = value; };
}

我可以将字符串数组添加到我的列表视图中。但是我如何在列表视图中将 2 个不同的值添加到同一行(可以这么说) - 在 Java 中。如果你不明白我的问题,请告诉我——我会尽量详细说明

这是我的代码:

ArrayList<AppItem> apps;
    @Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        final List<ResolveInfo> pkgAppsList = getPackageManager().queryIntentActivities(mainIntent, 0);
        AppItem appItem = new AppItem();
        for (ResolveInfo applicationInfo : pkgAppsList) {
            appItem._appname = (String) applicationInfo.activityInfo.loadLabel(getPackageManager());
            appItem._app= applicationInfo.activityInfo.packageName;
            apps.add(appItem);
        }

        ArrayAdapter<AppItem> adapter = new ArrayAdapter<AppItem>(this,android.R.layout.simple_list_item_1,apps);

        ListView listView = new ListView(this);     
        listView.setAdapter(adapter);
         setContentView(listView);

         listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                String item = ((TextView)view).getText().toString();            
                Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();

            }
        });

    }
class AppItem{
    String _appname;
    public String getAppname(){return _appname;};
    public void setAppname(String value){_appname = value;};
    String _app;
    public String getApp(){ return _app; };
    public void setApp(String value){_app = value; };
}

还是有替代使用

Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address");
startActivity(LaunchIntent);

我可以通过其标签名称启动应用程序吗?

4

2 回答 2

1

您需要为该行定义自己的布局(可以容纳任意数量的元素),然后getView()在您的适配器中覆盖,膨胀您的布局并在列表视图要求时返回它。这使您能够使每一行看起来像您想要的那样,或者使每一行根据数据类型而有所不同(这完全取决于您的getView()返回值 - 列表视图将只显示适配器返回的内容)。我在这里没有给出任何代码,因为实际上任何 Android ListView 教程都会给你,因为这是非常基础的。

随机发现的教程:这里这里

于 2013-01-15T12:42:51.110 回答
1

您的 ArrayAdapter 显示AppItem.toString()您给它的布局中的内容。

您可以覆盖 toString() 以显示标签:

public void toString() {
    return _appName;
}

在onItemClick中,你可以通过调用来获取item

AppItem item = (AppItem) parent.getItemAtPosition(position);

或者,假设 appItem 是可访问的(最终或您的活动的字段,而不是方法的局部变量)

apps.get(position);

然后,您可以拥有包并调用活动:

Intent intent = getPackageManager().getLaunchIntentForPackage(item.getAapp());
于 2013-01-15T13:06:22.987 回答