Google maps 如何在谷歌地图android上设置多重标记?

Google maps 如何在谷歌地图android上设置多重标记?,google-maps,android-studio,firebase-realtime-database,google-maps-markers,google-maps-android-api-2,Google Maps,Android Studio,Firebase Realtime Database,Google Maps Markers,Google Maps Android Api 2,我已经完成了谷歌地图标记与多个位置,我已经添加了一些医院的位置,如医院名称,经度和纬度字段,我从firebase检索并加载到具有医院名称的可搜索微调器。当我点击医院名称时,它将标记到该特定位置,但在我的代码中,所有位置都已标记,但当我点击它时,将转到该标记并返回到当前位置当我在可搜索微调器中点击医院名称时,如何显示位置任何一个请帮助我 提前谢谢 This is my java code public class MapsActivity extends AppCompatActivity i

我已经完成了谷歌地图标记与多个位置,我已经添加了一些医院的位置,如医院名称,经度和纬度字段,我从firebase检索并加载到具有医院名称的可搜索微调器。当我点击医院名称时,它将标记到该特定位置,但在我的代码中,所有位置都已标记,但当我点击它时,将转到该标记并返回到当前位置当我在可搜索微调器中点击医院名称时,如何显示位置任何一个请帮助我

提前谢谢


This is my java code

public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback, IFirebaseLoaddone, NavigationView.OnNavigationItemSelectedListener {

    private GoogleMap mMap;
    double longitude, latitude;
    private SearchableSpinner searchableSpinner;

    DatabaseReference hospitalRef;
    IFirebaseLoaddone iFirebaseLoaddone;
    List<Hospital> hospitals;

    private DrawerLayout drawer;
    private HashMap<String, Marker> mMarkers = new HashMap<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        searchableSpinner = findViewById(R.id.searchviewid);
        BubbleSeekBar bubbleSeekBar = findViewById(R.id.seekbar);
        final TextView textView = findViewById(R.id.textview);

        drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        //init Db
        hospitalRef = FirebaseDatabase.getInstance().getReference("hospital");
        //init interface
        iFirebaseLoaddone = this;

        hospitalRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                List<Hospital> hospital = new ArrayList<>();
                for (DataSnapshot hospitalsnapshot : dataSnapshot.getChildren()) {
                    hospital.add(hospitalsnapshot.getValue(Hospital.class));
                }
                iFirebaseLoaddone.onFirebaseLoadSuccess(hospital);

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                iFirebaseLoaddone.onFirebaseLoadFailed(databaseError.getMessage());

            }
        });

        searchableSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                hospitalRef.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                        setMarker(dataSnapshot);
                    }

                    @Override
                    public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                        setMarker(dataSnapshot);
                    }

                    @Override
                    public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

                    }

                    @Override
                    public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });


        bubbleSeekBar.setOnProgressChangedListener(new BubbleSeekBar.OnProgressChangedListener() {
            @Override
            public void onProgressChanged(int progress, float progressFloat) {
                //textView.setText( String.format( "on change %d",progress ) );
            }

            @Override
            public void getProgressOnActionUp(int progress, float progressFloat) {

            }

            @Override
            public void getProgressOnFinally(int progress, float progressFloat) {

            }
        });

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        latitude = getIntent().getDoubleExtra("latitude", 0);
        longitude = getIntent().getDoubleExtra("longtitude", 0);

        findViewById(R.id.zoomin).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mMap.animateCamera(CameraUpdateFactory.zoomIn());
            }
        });

        findViewById(R.id.zoomout).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mMap.animateCamera(CameraUpdateFactory.zoomOut());
            }
        });


    }

    @Override
    public void onMapReady(GoogleMap googleMap) {

        mMap = googleMap;

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager
                .PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {

            return;
        }

        mMap.setMyLocationEnabled(true);

        mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
            @Override
            public void onMyLocationChange(Location location) {

                CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(location.getLatitude(), location.getLongitude()));
                CameraUpdate Zoom = CameraUpdateFactory.zoomTo(16);
                mMap.clear();

                MarkerOptions mp = new MarkerOptions();
                mp.position(new LatLng(location.getLatitude(), location.getLongitude()));
                mp.title("Source");

                mMap.addMarker(mp);
                mMap.moveCamera(center);
                mMap.animateCamera(Zoom);
            }
        });
    }


    @Override
    public void onFirebaseLoadSuccess(List<Hospital> hospitalList) {

        hospitals = hospitalList;
        //get all data
        List<String> name_list = new ArrayList<>();
        List<Double> latitude = new ArrayList<>();
        List<Double> longitude = new ArrayList<>();
        for (Hospital hospital : hospitalList)
            name_list.add(hospital.getName());




        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, name_list);
        searchableSpinner.setAdapter(adapter);

    }



    @Override
    public void onFirebaseLoadFailed(String message) {

    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

        switch (item.getItemId()) {
            case R.id.nav_home:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new HomeFragment()).commit();
                break;
            case R.id.nav_location:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new LocationFragment()).commit();
                break;
            case R.id.nav_setting:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new SettingFragment()).commit();
                break;
            case R.id.nav_logout:
               logout();
                break;

        }

        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

    private void logout()
    {
        FirebaseAuth.getInstance().signOut();

        Intent intent= new Intent(getApplicationContext(),LoginActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    }

    @Override
    public void onBackPressed() {
        if(drawer.isDrawerOpen(GravityCompat.START)){
            drawer.closeDrawer(GravityCompat.START);
        }else {
            super.onBackPressed();
        }
    }

    private  void  setMarker(DataSnapshot dataSnapshot){

        String key = dataSnapshot.getKey();
        HashMap<String, Object> value = (HashMap<String, Object>) dataSnapshot.getValue();

        double latitude = Double.parseDouble(value.get("latitude").toString());
        double longitude = Double.parseDouble(value.get("longitude").toString());

        LatLng location = new LatLng(latitude,longitude);

        if(!mMarkers.containsKey(key)) {
            mMarkers.put(key, mMap.addMarker(new MarkerOptions().title(key).position(location)));
        }
        else
        {
            mMarkers.get(key).setPosition(location);

        }
        LatLngBounds.Builder builder = new LatLngBounds.Builder();
        for(Marker marker : mMarkers.values()){
            builder.include(marker.getPosition());
        }
        mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(builder.build(),100));

    }


}


这是我的java代码
公共类MapsActivity扩展了AppCompativeActivity在MapReadyCallback、IFirebaseLoaddone、NavigationView.OnNavigationItemSelectedListener上的实现{
私有谷歌地图;
双经纬度;
私有SearchableSpinner SearchableSpinner;
数据库参考hospitalRef;
如果重新加载完成,则重新加载完成;
列出医院名单;
私人抽屉;
私有HashMap mMarkers=newhashmap();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_映射);
searchableSpinner=findViewById(R.id.searchviewid);
BubbleSeekBar BubbleSeekBar=findViewById(R.id.seekbar);
最终文本视图文本视图=findViewById(R.id.TextView);
抽屉=findViewById(R.id.抽屉布局);
NavigationView NavigationView=findViewById(R.id.nav_视图);
navigationView.setNavigationItemSelectedListener(此);
//初始化数据库
hospitalRef=FirebaseDatabase.getInstance().getReference(“医院”);
//初始化接口
IFIRebealLoadDone=此;
hospitalRef.addListenerForSingleValueEvent(新值EventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
List hospital=new ArrayList();
对于(DataSnapshot hospitalsnapshot:DataSnapshot.getChildren()){
添加(hospitalsnapshot.getValue(hospital.class));
}
如果重新加载完成。重新加载成功(医院);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
iFirebaseLoaddone.onFirebaseLoadFailed(databaseError.getMessage());
}
});
searchableSpinner.setOnItemSelectedListener(新AdapterView.OnItemSelectedListener()){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
hospitalRef.addChildEventListener(新的ChildEventListener(){
@凌驾
公共void onChildaded(@NonNull DataSnapshot DataSnapshot,@null字符串s){
设置标记(dataSnapshot);
}
@凌驾
public void onChildChanged(@NonNull DataSnapshot DataSnapshot,@null字符串s){
设置标记(dataSnapshot);
}
@凌驾
公共void onChildRemoved(@NonNull DataSnapshot DataSnapshot){
}
@凌驾
public void onChildMoved(@NonNull DataSnapshot DataSnapshot,@null字符串s){
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
bubbleSeekBar.setOnProgressChangedListener(新的bubbleSeekBar.OnProgressChangedListener(){
@凌驾
public void onProgressChanged(int-progress,float-progressFloat){
//textView.setText(String.format(“更改%d时,进度));
}
@凌驾
public void getProgressOnActionUp(int progress,float progressFloat){
}
@凌驾
public void getProgressOnFinally(int-progress,float-progressFloat){
}
});
SupportMapFragment mapFragment=(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
getMapAsync(这个);
纬度=getIntent().getDoubleExtra(“纬度”,0);
经度=getIntent().getDoubleExtra(“长度”,0);
findviewbyd(R.id.zoomin).setOnClickListener(新视图.OnClickListener()){
@凌驾
公共void onClick(视图v){
mMap.animateCamera(CameraUpdateFactory.zoomIn());
}
});
findviewbyd(R.id.zoomout).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mMap.animateCamera(CameraUpdateFactory.zoomOut());
}
});
}
@凌驾
4月1日公开作废(谷歌地图谷歌地图){
mMap=谷歌地图;
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager
.PERMISSION\u已授予和&ActivityCompat.checkSelfPermission(此,Manifest.PERMISSION.ACCESS\u位置)
!=PackageManager.权限(已授予){
返回;
}
mMap.setMyLocationEnabled(真);
mMap.setOnMyLocationChangeListener(新的GoogleMap.OnMyLocationChangeListener(){
@凌驾
公共void onMyLocationChange(位置){
CameraUpdate center=CameraUpdateFactory.newLatLng(newLatLng(location.getLatitude(),location.getLongitude());
CameraUpdate Zoom=CameraUpdateFactory.zoomTo(16);
mMap.clear();
MarkerOptions mp=新的MarkerOptions();
mp.位置(新车床)(位置
mMap.moveCamera(center);
mMap.animateCamera(Zoom);
mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
            @Override
            public void onMyLocationChange(Location location) {

                CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(location.getLatitude(), location.getLongitude()));
                CameraUpdate Zoom = CameraUpdateFactory.zoomTo(16);
                mMap.clear();

                MarkerOptions mp = new MarkerOptions();
                mp.position(new LatLng(location.getLatitude(), location.getLongitude()));
                mp.title("Source");

                mMap.addMarker(mp);'

            }
        });
    }