首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ListView添加项目

ListView添加项目
EN

Stack Overflow用户
提问于 2013-01-15 20:33:03
回答 2查看 446关注 0票数 0

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

代码语言:javascript
运行
复制
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; };
}

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

下面是我的代码:

代码语言:javascript
运行
复制
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; };
}

或者,是否有其他方法可以替代使用

代码语言:javascript
运行
复制
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address");
startActivity(LaunchIntent);

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-15 21:06:23

您的ArrayAdapter在您提供的布局中显示AppItem.toString()的内容。

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

代码语言:javascript
运行
复制
public void toString() {
    return _appName;
}

在onItemClick中,您可以通过调用

代码语言:javascript
运行
复制
AppItem item = (AppItem) parent.getItemAtPosition(position);

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

代码语言:javascript
运行
复制
apps.get(position);

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

代码语言:javascript
运行
复制
Intent intent = getPackageManager().getLaunchIntentForPackage(item.getAapp());
票数 1
EN

Stack Overflow用户

发布于 2013-01-15 20:42:51

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

随机分布的教程:herehere

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14337833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档