我写了一个应用程序,显示都柏林市一组交通摄像头的位置。我在地图上显示这些标记。当用户点击标记时,他们将被带到显示来自相关摄像机的最新图片的新活动。它似乎适用于第一次点击。图像显示和回击将再次带您到相机位置的地图。然而,再次点击(相同的标记或不同的标记)会将您带到图像,但然后单击返回会再次显示图像。 ImageView的实例似乎在每次连续点击时累积。
相关代码(我认为)是:
@Override
public boolean onTap(int index) {
Log.d(TAG, "Tap done on" + index);
Intent i = new Intent(TrafficViewActivity.this, CameraViewer.class);
i.putExtra("imageSrc", getItem(index).getImageSrc());
startActivity(i);
return super.onTap(index);
}
和这(不做任何自定义):
@Override
public boolean onTap(GeoPoint p, MapView mapView) {
// mController.animateTo(p);
Log.d(TAG, "onTap geopoint:");
return super.onTap(p, mapView);
}
以上两种方法都在我使用此签名创建的类中找到:
class HelloItemizedOverlay extends ItemizedOverlay<MyOverlayItem>
目标活动只有一个onResume,如下所示:
@Override
protected void onResume() {
super.onResume();
Intent i = getIntent();
Bundle ex = i.getExtras();
if (ex != null) {
String imageSrc = (String) ex.get("imageSrc");
Log.d(TAG, "imageSrc: " + imageSrc);
Util u = new Util();
u.downloadFile(mImage, imageSrc);
}
}
当我查看我的日志文件时,确实看起来好像多次调用了水龙头,但我不明白为什么会这样。任何帮助都会很棒。
答案 0 :(得分:0)
如果不深入研究,我会想到两件事:
1)您的标记可能重叠,在这种情况下替换
return super.onTap(index);
带
return true;
会有所作为
2)您可能正在开始第二个活动的新实例,而不是在后台重复使用该实例。
您可以尝试添加:
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
在你的startActivity(i)之前;
我认为这些中的一个或两个都会有所帮助,它们会对所发生的事情产生影响,所以请尝试一下。