我想在Button上添加一个onClicklistener;因此,当我按下它时,它会动画到用户位置。但是,如果没有用户位置并且按下该按钮,则由于用户location = null而崩溃。当它不等于null时,如何使它运行?
我试过了 -
private void myLocationButton() {
MapView mp = (MapView) findViewById(R.id.mapView);
final MapController mapController = mp.getController();
final Button myLocationButton = (Button) findViewById(R.id.myLocationButton);
myLocationButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (myLocationButton.isClickable()) {
mapController.animateTo(myLocationOverlay.getMyLocation());
mapController.setZoom(17);
}
}
});
}
这是一篇很长的帖子,谢谢你充裕的时间。
答案 0 :(得分:1)
你做得差不多。但是你必须获得一个新的Location
对象,因为在你按下按钮的那一刻它必须是!= null
。我也怀疑你刚刚点击了isClickable()
检查。
myLocationButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Location userLocation = myLocationOverlay.getMyLocation();
if (myLocationButton.isClickable() && userLocation != null) {
mapController.animateTo(userLocation);
mapController.setZoom(17);
}
}
});
我在这里使用userLocation
变量,因为
if (myLocationOverlay.getMyLocation() != null) {
mapController.animateTo(myLocationOverlay.getMyLocation());
}
仍然可以抛出NullPointerException
,因为您在第二次调用getMyLocation
时获得了新结果,并且可能再次null
。我应该是安全的,因为getMyLocation
一旦有了真正的位置,可能永远不会变回null
。
答案 1 :(得分:0)
试试这个:
@Override
public void onClick(View v) {
if (myLocationButton.isClickable() && myLocationOverlay.getMyLocation() != null) {
mapController.animateTo(myLocationOverlay.getMyLocation());
mapController.setZoom(17);
}
}
});