0

我目前正在开发一个 android 项目,其中列出了手机上安装的所有应用程序。当用户单击它时,它应该提供包名称,以便我稍后可以启动该应用程序。目前我将包名称存储在下一行,但我认为这可能会使某些用户感到困惑,因为他们并不真正需要知道包名称而只知道应用程序名称。

因此,有没有一种方法可以将包名称存储在 ListView 中(使用带有 TextView 和 ImageView 的自定义适配器),当用户选择应用程序名称时我可以检索它。

感谢您的任何帮助,您可以提供。

4

2 回答 2

2

一种方法是,您可以使用setTag (Object tag)setTag(int key, Object tag)来存储这个额外的信息,TextView或者任何从以下扩展的视图View

TextView tv = findViewById(R.id.textview);
tv.setTag(<package_name_string>);

tv.getTag(); // to get the value.

其他方法是将该信息单独存储List并确保可以通过适配器访问。

于 2012-06-17T23:18:10.340 回答
0

因此,有没有一种方法可以将包名称存储在 ListView 中(使用带有 TextView 和 ImageView 的自定义适配器),当用户选择应用程序名称时我可以检索它。

数据已经在您的自定义适配器中。就像在这个示例项目中一样,您可能正在使用ArrayAdapter从以下List<ResolveInfo>位置返回的一个queryIntentActivities()

List<ResolveInfo> launchables=pm.queryIntentActivities(main, 0);

Collections.sort(launchables, new ResolveInfo.DisplayNameComparator(pm)); 

adapter=new AppAdapter(pm, launchables);

(在哪里AppAdapter extends ArrayAdapter<ResolveInfo>

如果是这样,您将获得从适配器启动应用程序所需的信息:

  @Override
  protected void onListItemClick(ListView l, View v,
                                 int position, long id) {
    ResolveInfo launchable=adapter.getItem(position);
    ActivityInfo activity=launchable.activityInfo;
    ComponentName name=new ComponentName(activity.applicationInfo.packageName,
                                         activity.name);
    Intent i=new Intent(Intent.ACTION_MAIN);

    i.addCategory(Intent.CATEGORY_LAUNCHER);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
    i.setComponent(name);

    startActivity(i);    
  }
于 2012-06-17T23:17:28.557 回答