问题描述
我需要保存触发的位置才能在再次打开应用程序时显示它们。
我使用 int数组在 onMarkerClick 方法中保存了触发位置的数量。并使用此数组在 createMarkers 方法中创建所需的标记。 我试图保存和还原此数组,但是它不起作用。
Activity.class
的一部分public class MapsActivity extends FragmentActivity
implements
OnRequestPermissionsResultCallback,OnMapReadyCallback,OnMarkerClickListener {
private LatLng[] latLngArray;
private String[] titleArray;
private Marker[] markerArray;
private int[] resIdArray;
private int ARRAY_SIZE = 7;
private int COUNTER = 0;
private static final float disTANCE = 50;
private boolean START_POINT_CHECKED = false;
public final String inArrayName= "inArray";
//public int outArray[] = new int[ARRAY_SIZE];
public int inArray[];
private Location mCurrentLocation;
private GoogleMap mMap;
private MediaPlayer mediaPlayer;
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
outState.putIntArray(outArrayName,inArray);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle inState) {
inArray = inState.getIntArray(outArrayName);
super.onRestoreInstanceState(inState);
}
@Override
protected void onCreate(Bundle inState) {
inArray = new int[ARRAY_SIZE];
super.onCreate(inState);
setContentView(R.layout.activity_maps);
if(inState == null){
for (int i=0; i<ARRAY_SIZE;i++){
inArray[i]=0;
}
}
private void createMarkersList(){
markerArray = new Marker[ARRAY_SIZE];
if(inArray[0] == 777) {
markerArray[0] = mMap.addMarker(new MarkerOptions()
.position(latLngArray[0])
.anchor(0.5f,0.5f)
.icon(BitmapDescriptorFactory.fromresource(R.drawable.marker1))
.title(titleArray[0])
.snippet("0")
.visible(true)
);
markerArray[0].setTag(666);
inArray[0] = 777;
START_POINT_CHECKED = true;
} else {
markerArray[0] = mMap.addMarker(new MarkerOptions()
.position(latLngArray[0])
.anchor(0.5f,0.5f)
.icon(BitmapDescriptorFactory.fromresource(R.drawable.marker2))
.title(titleArray[0])
.snippet("0")
.visible(true)
);
markerArray[0].setTag(0);
}
if (START_POINT_CHECKED) {
for (int i = 1; i < ARRAY_SIZE; i++) {
if (inArray[i] == 777) {
markerArray[i] = mMap.addMarker(new MarkerOptions()
.position(latLngArray[i])
.anchor(0.5f,0.5f)
.icon(BitmapDescriptorFactory.fromresource(R.drawable.marker1))
.title(titleArray[i])
.snippet(Integer.toString(i))
.visible(true)
);
markerArray[i].setTag(666);
inArray[i]=777;
} else {
markerArray[i] = mMap.addMarker(new MarkerOptions()
.position(latLngArray[i])
.anchor(0.5f,0.5f)
.icon(BitmapDescriptorFactory.fromresource(R.drawable.marker2))
.title(titleArray[i])
.snippet(Integer.toString(i))
.visible(true)
);
markerArray[i].setTag(i);
}
}
} else {
for (int i = 1; i < ARRAY_SIZE; i++) {
markerArray[i] = mMap.addMarker(new MarkerOptions()
.position(latLngArray[i])
.anchor(0.5f,0.5f)
.icon(BitmapDescriptorFactory.fromresource(R.drawable.marker2))
.title(titleArray[i])
.snippet(Integer.toString(i))
.visible(false)
);
markerArray[i].setTag(i);
}
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setonMarkerClickListener(this);
EnableuserLocation();
MapStyling();
createLatLngsList();
createTitlesList();
createMarkersList();
createResIdArray();
}
@Override
public boolean onMarkerClick(Marker marker) {
int id = (int) marker.getTag();
Log.d(TAG,"Marker" + id + "Clicked");
if (getdistance(marker.getPosition(),new LatLng(mCurrentLocation.getLatitude(),mCurrentLocation.getLongitude())) <= disTANCE){
if ( id == 666){
if (mediaPlayer.isPlaying()){
mediaPlayer.pause();
return true;
} else{
mediaPlayer.start();
}
} else {
if(START_POINT_CHECKED) {
marker.setIcon(BitmapDescriptorFactory.fromresource(R.drawable.marker1));
if (mediaPlayer!= null){
mediaPlayer.reset();
}
mediaPlayer = MediaPlayer.create(this,resIdArray[id]);
mediaPlayer.start();
inArray[id] = 777;
marker.setTag(666);
COUNTER++;
if (COUNTER == 7){
mediaPlayer.setonCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
showPicture();
}
});
}
return true;
} else{
if(id == 0) {
marker.setIcon(BitmapDescriptorFactory.fromresource(R.drawable.marker1));
if (mediaPlayer!= null){
mediaPlayer.reset();
}
mediaPlayer = MediaPlayer.create(this,resIdArray[id]);
mediaPlayer.start();
inArray[id] = 777;
marker.setTag(666);
COUNTER++;
START_POINT_CHECKED = true;
showMarkers();
return true;
}else {
return true;
}
}
}
}
return false;
}
解决方法
如果标签的标记始终相同,则可以将数组放入共享的首选项中,并在onMapReady中恢复这些位置
您应该在onMarkerClick方法中添加标记值