0

ボタンに onClicklistener を追加したい。押すと、ユーザーの場所にアニメーション化されます。ただし、ユーザーの場所がなく、ボタンが押された場合、ユーザーの場所 = 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);

            }

        }
    });

}

久しぶりの投稿です、お時間いただきありがとうございました。

4

2 に答える 2

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の 2 回目の呼び出しで新しい結果が得られるため、引き続き a をスローできgetMyLocationますnull。ただし、実際の場所があるとgetMyLocation元に戻ることはおそらくないので、安全なはずです。null

于 2012-04-19T17:30:15.143 に答える
0

これを試して:

@Override
        public void onClick(View v) {
            if (myLocationButton.isClickable() && myLocationOverlay.getMyLocation() != null) {
                mapController.animateTo(myLocationOverlay.getMyLocation());
                mapController.setZoom(17);

            }

        }
    });
于 2012-04-19T17:30:07.523 に答える