Android - 从Intent过滤器返回的组合列表

时间:2011-08-30 15:35:32

标签: android android-intent

我会尽量做这个。 我想获得设备上安装的browsers列表,以及处理maps的应用列表,例如Google地图,MapDroyd。我想在自定义对话框中显示这两个列表,并根据单击的列表,使用提供的坐标和相关URI加载应用程序。

要加载浏览器,您只需传入http:// URI,并使用地图应用程序传入geo:lat,lon。我的问题是,将它们组合到同一个列表中。

到目前为止,这是我的代码:

final PackageManager packageManager = activity.getPackageManager();      
//This gets all the browsers
final String browserURI = httpURL+lat+","+lon;
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(browserURI));

final List<ResolveInfo> browserList = packageManager.queryIntentActivities(browserIntent, 0);

// This gets all the Map apps:
final String mapUri = "geo:"+lat+","+lon;
Intent mapIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(mapUri));

final List<ResolveInfo> mapList = packageManager.queryIntentActivities(mapIntent, 0);

所以我这里有browserListmapList,我认为它包含了我要显示的所有应用的列表。问题是如何将它们组合成一个共同的第三个列表。它是否像ListView.add()或其他东西一样简单?

理想情况下,最后,我希望它能够弹出应用,如果用户点击在浏览器中查看,则会打开http://mysite链接,如果他们选择在一个地图应用程序,然后它将在指定的坐标处启动该应用程序。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

ListView需要ListAdapter。 ListAdapter是为ListView提供数据的东西。构造ListAdapter时,其中一个构造函数参数是数据数组。

如果您需要在已经将数据放入ListAdapter之后更新ListView,则需要先更新先前传入的数组,然后在ListAdapter上调用notifyDataSetChanged(),您可以从ListView获取该数据。

如果您在创建ListView之前创建两个列表,那么要合并两个列表,您可以这样做:

browserList.addAll(mapList);