2011-06-25 21 views
2

所以,当用户点击覆盖项和对话框时,只要用户点击屏幕上的任何其他位置,我就想记录一条消息。我在网上阅读,最好的方法是打电话给超级(onTap(GeoPoint,Mapview))。如果它返回true,我会记录,否则显示对话框。然而,我检查了超级调用的输出,并且它似乎返回false,而不管用户点击的位置如何。任何人都可以解释为什么或者可能的解super(onTap(GeoPoint,Mapview))总是返回false

回答

1

你还必须在overlay本身处理onTap(并在那里返回true)。我不认为任何覆盖层自己处理onTap - 你必须从基类派生并覆盖覆盖层本身的onTap()方法。他们中的一些人做了一些计算,看看你在哪里挖掘,但他们不处理它。

例如,如果你从ItemizedOverlay派生,你有,你应该在你的子类中覆盖一个额外的方法:

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

ItemizedOverlay已经计算出,你挖,倘若你里面的物品之一,抽头新的onTap(int)方法被调用,项目的索引被点击。如果你从这个方法返回true,那么当调用super()时,onTap(GeoPoint,MapView)会变为真。

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

是的,我正在这样做,它不工作。但看了你的代码后,我意识到在onTap(final int index)方法中,我返回了导致问题的超级(索引)。在改变这个'真正'它似乎工作。谢谢! – TheBleedingEdge

+0

高兴地帮助:) –