从应用程序列表中加载应用程序
问题描述:
我目前正在开发一个Android项目,其中列出了安装在手机上的所有应用程序。当用户点击它应该提供包名称,以便我可以稍后启动应用程序。目前,我将包名称存储在下一行,但我认为这可能会让某些用户感到困惑,因为他们实际上并不需要知道包名,而只需知道应用程序名。从应用程序列表中加载应用程序
因此,有没有一种方法可以将包名称存储在ListView中(使用带有TextView和ImageView的自定义适配器),当用户选择应用程序名称时,可以检索该名称。
感谢您提供的任何帮助。
答
的一种方法是,你可以使用seTag (Object tag)或setTag(int key, Object tag)来存储这些额外的信息与TextView
或这是从View
扩展NY观点一样:
TextView tv = findViewById(R.id.textview);
tv.setTag(<package_name_string>);
tv.getTag(); // to get the value.
另一种方法是,以这些信息存储在一个单独的List
并确保可以通过适配器进行访问。
答
因此,有没有一种方法可以将ListView中的包名称(使用带有TextView和ImageView的自定义适配器)存储在用户选择应用程序名称时可以检索到的位置。
数据已存在于您的自定义适配器中。作为this sample project,你可能正在使用一个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);
}