我目前正在开发一个 android 项目,其中列出了手机上安装的所有应用程序。当用户单击它时,它应该提供包名称,以便我稍后可以启动该应用程序。目前我将包名称存储在下一行,但我认为这可能会使某些用户感到困惑,因为他们并不真正需要知道包名称而只知道应用程序名称。
因此,有没有一种方法可以将包名称存储在 ListView 中(使用带有 TextView 和 ImageView 的自定义适配器),当用户选择应用程序名称时我可以检索它。
感谢您的任何帮助,您可以提供。
我目前正在开发一个 android 项目,其中列出了手机上安装的所有应用程序。当用户单击它时,它应该提供包名称,以便我稍后可以启动该应用程序。目前我将包名称存储在下一行,但我认为这可能会使某些用户感到困惑,因为他们并不真正需要知道包名称而只知道应用程序名称。
因此,有没有一种方法可以将包名称存储在 ListView 中(使用带有 TextView 和 ImageView 的自定义适配器),当用户选择应用程序名称时我可以检索它。
感谢您的任何帮助,您可以提供。
一种方法是,您可以使用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
并确保可以通过适配器访问。
因此,有没有一种方法可以将包名称存储在 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);
}