【问题标题】:Android Map - ListView inside info window - Not getting click eventAndroid地图 - 信息窗口内的ListView - 没有得到点击事件
【发布时间】:2016-03-03 20:47:14
【问题描述】:

我正在我的应用程序中实现谷歌地图。我的要求是单击标记时显示自定义信息窗口。

我的自定义 infoWindow 包含一个列表视图,我需要根据点击的项目执行一些操作。

我得到了整个 infoWindow 的点击事件(使用 OnInfoWindowClickListener),但问题是,我没有得到 infoWindow 内列表视图的点击事件。

根据描述here

注意:绘制的信息窗口不是实时视图。视图在返回时呈现为图像(使用 View.draw(Canvas))。这意味着对视图的任何后续更改都不会反映在地图上的信息窗口中。要稍后更新信息窗口(例如,加载图像后),请调用 showInfoWindow()。此外,信息窗口不会尊重任何普通视图的典型交互性,例如触摸或手势事件。但是,您可以在整个信息窗口上收听通用点击事件,如下节所述。

那么有什么方法可以让我在自定义 infoWindow 中获取每个点击项目的点击事件?

截图:

【问题讨论】:

  • 使用自定义适配器,在自定义适配器getview方法中,您可以添加布局和列表视图等.. googleMap.setInfoWindowAdapter(new MyCustomAdapterForItems());您的适配器实现 GoogleMap.InfoWindowAdapter 就像公共类 MyCustomAdapterForItems 实现 GoogleMap.InfoWindowAdapter { }
  • 仍然无法正常工作:-(
  • 有什么办法可以做到吗?

标签: android android-mapview android-maps-v2 android-maps


【解决方案1】:

最好的方法可能是将地图包裹在布局中。您将在其中设置监听器以触摸事件,然后将事件传播到已保存的 infowindows 视图实例。

查看答案:https://stackoverflow.com/a/15040761/838424

这适用于按钮,但由于未知原因,它不适用于 ListView(但传播到 ListView 的点击)。

更新: 由于函数 isAttachedToWindow 返回 false(在 AbsListView.onTouchEvent 中),点击不会传播到项目。哪个阻止处理点击事件。

解决方法是在 dispatchTouchEvent 的包装器中使用代码

int pos = myListView.pointToPosition((int)copyEv.getX(), (int)copyEv.getY());

我的完整解决方法:

if (copyEv.getX() >= 0 && copyEv.getY() >= 0
                && copyEv.getX() < infoWindow.getWidth()
                && copyEv.getY() < infoWindow.getHeight())
        {
            // event is inside infoWindow
            final int actionMasked = ev.getActionMasked();
            switch (actionMasked) {
                case MotionEvent.ACTION_DOWN:
                    int pos = vItems.pointToPosition((int)copyEv.getX(), (int)copyEv.getY());
                    if (pos >= 0) {
                        vItems.performItemClick(infoWindow, pos, 0);
                        ret = true;
                    }
                    break;
                case MotionEvent.ACTION_UP: {
                    break;
                }
            }
        }

【讨论】:

    猜你喜欢
    • 2018-03-26
    • 2013-10-06
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 2016-03-15
    相关资源
    最近更新 更多