如何在我的微调器中使用 getItemAtPosition 从谷歌地图中的火力基地使用 android studio
Posted
技术标签:
【中文标题】如何在我的微调器中使用 getItemAtPosition 从谷歌地图中的火力基地使用 android studio【英文标题】:how to use getItemAtPosition in my spinner from firebase in google map using android studio 【发布时间】:2020-04-25 16:00:58 【问题描述】:我需要帮助。在这里,我已将医院名称从 firebase 加载到微调器,我想如何获取项目Atposition,因为当我单击医院名称时,它必须在我的应用程序中选择并单击 getDirection 按钮,因此它将重新加载到谷歌地图并标记特定医院是选择所以现在如何在我的 java 代码中做,但我知道缺少一些东西但找不到我请帮帮我 提前致谢
Java code
//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)
String seleceted =parent.getItemAtPosition(position).toString();
Log.e("clicked",""+ seleceted);
hospitalRef.addChildEventListener(new ChildEventListener()
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
setMarker(dataSnapshot);
// Comment comment = dataSnapshot.getValue(Comment.class);
@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)
);
@Override
public void onFirebaseLoadSuccess(List<Hospital> hospitalList)
hospitals = hospitalList;
//get all data
List<String> id = new ArrayList<>();
List<String> name_list = new ArrayList<>();
List<Double> latitude = new ArrayList<>();
List<Double> longitude = new ArrayList<>();
for (Hospital hospital : hospitalList)
// id.add(hospital.getId());
name_list.add(hospital.getName());
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, name_list);
searchableSpinner.setAdapter(adapter);
【问题讨论】:
【参考方案1】:您可以从 spinner 获得 selected value,如下所示,
String seleceted =parent.getItemAtPosition(position).toString(); //your code
String selected = name_list.get(position); //another way to get selected name
您可以从 spinner 获取 latitude 和 longitude - 从 firebase DB 获取医院名称。
Query query = reference.orderByChild("name").equalTo(seleceted);
query.addChildEventListener(new ChildEventListener()
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
double latitude = dataSnapshot.child("latitude").getValue();
double longitude = dataSnapshot.child("longitude").getValue();
setMarker(latitude,longitude);
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot)
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
);
【讨论】:
您说选择名称的另一种方式,但该名称会从 Firebase 加载所有数据,例如该特定医院名称的 lat 和 long 这里我从 Firebase 加载纬度和经度,它在我的谷歌地图中标记我想要的只是将 name_list 加载到微调器,但是当我点击微调器中的医院名称时,它打算使用谷歌地图并在谷歌地图中显示医院名称位置我该怎么做以上是关于如何在我的微调器中使用 getItemAtPosition 从谷歌地图中的火力基地使用 android studio的主要内容,如果未能解决你的问题,请参考以下文章