Android - ListView中包含的MapView

Rya*_*yan 11 android listview android-mapview

目前我正在尝试在ListView中放置MapView.有人有这个成功吗?它甚至可能吗?这是我的代码:

            ListView myList = (ListView) findViewById(android.R.id.list);
        List<Map<String, Object>> groupData = new ArrayList<Map<String, Object>>();

        Map<String, Object> curGroupMap = new HashMap<String, Object>();
        groupData.add(curGroupMap);
        curGroupMap.put("ICON", R.drawable.back_icon);
        curGroupMap.put("NAME","Go Back");
        curGroupMap.put("VALUE","By clicking here");

        Iterator it = data.entrySet().iterator();
        while (it.hasNext()) 
        {
            //Get the key name and value for it
            Map.Entry pair = (Map.Entry)it.next();
            String keyName = (String) pair.getKey();
            String value = pair.getValue().toString();

            if (value != null)
            {
                //Add the parents -- aka main categories
                curGroupMap = new HashMap<String, Object>();
                groupData.add(curGroupMap);

                //Push the correct Icon
                if (keyName.equalsIgnoreCase("Phone"))
                    curGroupMap.put("ICON", R.drawable.phone_icon);
                else if (keyName.equalsIgnoreCase("Housing"))
                    curGroupMap.put("ICON", R.drawable.house_icon);
                else if (keyName.equalsIgnoreCase("Website"))
                    curGroupMap.put("ICON", R.drawable.web_icon);
                else if (keyName.equalsIgnoreCase("Area Snapshot"))
                    curGroupMap.put("ICON", R.drawable.camera_icon);
                else if (keyName.equalsIgnoreCase("Overview"))
                    curGroupMap.put("ICON", R.drawable.overview_icon);  
                else if (keyName.equalsIgnoreCase("Location"))
                    curGroupMap.put("ICON", R.drawable.map_icon);
                else
                    curGroupMap.put("ICON", R.drawable.icon);

                //Pop on the Name and Value
                curGroupMap.put("NAME", keyName);
                curGroupMap.put("VALUE", value);
            }
        }

        curGroupMap = new HashMap<String, Object>();
        groupData.add(curGroupMap);
        curGroupMap.put("ICON", R.drawable.back_icon);
        curGroupMap.put("NAME","Go Back");
        curGroupMap.put("VALUE","By clicking here");

        //Set up adapter
        mAdapter = new SimpleAdapter(
                mContext,
                groupData,
                R.layout.exp_list_parent,
                new String[] { "ICON", "NAME", "VALUE" },
                new int[] { R.id.photoAlbumImg, R.id.rowText1, R.id.rowText2  }
        );

        myList.setAdapter(mAdapter); //Bind the adapter to the list 
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!!

Sid*_*ele 56

为一个相当古老的答案(实际上超过2年)发布一个替代解决方案,但我认为这可能会帮助那些可能像我一样偶然发现这篇文章的人.

注意:这可能对那些只需要在"地图"中显示位置但不需要在其中与之交互的人有用ListView.在单击某个项目后,实际地图可以显示在详细信息页面上ListView

正如@CaseyB已经指出的那样,MapView是一种沉重的看法.为了对抗这个方面(并且让我的生活更轻松但更容易;-)),我选择像使用静态Google Map一样构建一个URL,使用我的应用程序所需的几个参数.您可以在此处获得更多选项:https://developers.google.com/maps/documentation/staticmaps/

首先,当我为我构建数据时ListView,我将纬度经度等数据传递给一个字符串,其中包含一些从上述链接中获取的静态变量.我从Facebook API获得了我的坐标.

我用来构建链接的代码:

String getMapURL = "http://maps.googleapis.com/maps/api/staticmap?zoom=18&size=560x240&markers=size:mid|color:red|"  
+ JOLocation.getString("latitude") 
+ "," 
+ JOLocation.getString("longitude") 
+ "&sensor=false";
Run Code Online (Sandbox Code Playgroud)

上述构造的URL在浏览器中使用时返回一个.PNG文件.然后,在我adapter的活动中,我使用@Fedor的Lazy Loading来显示从之前构建的URL生成的图像,以显示在自定义中ListView.您当然可以选择自己的方法来显示它Map(实际上是地图的图像).

最终结果的一个例子.

在此输入图像描述

目前,我有大约30个奇怪的Checkin Maps(我将它与Facebook SDK一起使用)ListView,但是用户可以拥有100个,并且绝对没有关于它减速的报告.

我怀疑,考虑到问题已经过去的时间,这可能无助于OP,但希望它能帮助其他用户在未来登陆此页面.

  • 想不出更好的方法.很好. (2认同)

小智 6

首先,我不认为一次显示多个MapView会起作用.MapActivity文档每个进程只支持一个:

"每个进程只支持一个MapActivity.同时运行的多个MapActivities可能会以意外和不希望的方式干扰."

(http://code.google.com/android/add-ons/google-apis/reference/index.html)

它并没有明确表示你不能在MapActivity中拥有多个MapView,但我认为它们也会干涉,无论它们是什么类型的父ViewGroup.

其次,您可以考虑使用静态地图API来获取包含在ListView中的简单图像 - 完全成熟的MapView在任何情况下都可能是不必要的重量级:

http://code.google.com/apis/maps/documentation/staticmaps/

您可能面临的一个问题是静态地图API限制了"用户"的使用,这可能意味着通过IP(它不需要API密钥),并且移动网络可能会出现IP使用限制的问题.我不确定这究竟是怎么发挥出来的.


Cas*_*eyB 4

在这种情况下,您可以像将任何其他视图一样将MapView添加到列表中. 这是一个关于如何创建自定义列表适配器的快速教程.但是我必须提醒你,MapView是一个相当沉重的视图,如果你试图在屏幕上获得一堆它们,你会注意到应用程序缓慢!您可以只在列表项中添加一个按钮,将用户带到另一个页面,其中包含更多信息,包括地图.

  • 我想,链接不是用于在自定义适配器中显示mapview ...请指导我在listadapter中有一张地图 (2认同)