【问题标题】:super(onTap (GeoPoint, Mapview)) always returning falsesuper(onTap (GeoPoint, Mapview)) 总是返回 false
【发布时间】:2011-06-25 12:07:17
【问题描述】:

因此,我想在用户单击覆盖项目时记录一条消息,并在用户单击屏幕上的其他任何位置时记录一个对话框。我在网上读到最好的方法是调用 super(onTap (GeoPoint, Mapview)).如果它返回 true,我会记录,否则显示对话框。但是,我检查了 super 调用的输出,无论用户单击何处,它似乎都返回 false。谁能解释原因或可能的解决方案?

【问题讨论】:

    标签: android map


    【解决方案1】:

    您还必须在叠加层本身中处理 onTap(并在那里返回 true)。我不认为任何覆盖处理它自己的 onTap - 您必须从基类派生并覆盖覆盖本身的 onTap() 方法。他们中的一些人会进行一些计算以查看您点击的位置,但他们不处理它。

    例如,如果您从 ItemizedOverlay 派生,您将获得一个应在子类中覆盖的附加方法:

    @Override
    protected boolean onTap(final int index) {
       Log.d(...);
       return true;
    }
    

    ItemizedOverlay 已经计算了您点击的位置,如果您在其中一个项目内点击,新的 onTap(int) 方法将使用被点击的项目的索引调用。如果您从此方法返回 true,则 onTap(GeoPoint, MapView) 将在调用 super() 时为 true..

    @Override
    protected boolean onTap(GeoPoint p, MapView m) {
       if (!super.onTap(p,m)) {
          // show dialog here ....
       }
    }
    

    【讨论】:

    • 是的,我正在这样做,但它不起作用。但是在查看您的代码后,我意识到在 onTap(final int index) 方法中我返回了导致问题的 super(index)。在将其更改为“真实”时,它似乎正在工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2021-11-05
    • 2018-11-05
    • 2019-05-06
    • 2017-04-29
    • 2013-04-30
    相关资源
    最近更新 更多