首页 > 解决方案 > 获取 RecyclerView、OnClick 的单个字符串并将此字符串传递给 Google 地图搜索

问题描述

我正在我的应用程序中实现一个谷歌地图活动,我想通过地址给这个地图活动一个搜索。这些地址存储在 Firestore RecyclerView 中,当用户单击 Firestore RecyclerView 行之一时,我想让地图显示地址...

这是持有人

 public class RecyclerViewHolder1 extends RecyclerView.ViewHolder {

    public TextView mnomeEsercente, mindirizzoEsercente;

    public RecyclerViewHolder1(@NonNull View itemView) {
        super(itemView);

        mnomeEsercente = itemView.findViewById(R.id.roWnomeEsercente);
        mindirizzoEsercente = itemView.findViewById(R.id.roWindirizzoEsercente);
    }
}

这是适配器

public class RecyclerViewAdapter1 extends RecyclerView.Adapter<RecyclerViewHolder1> {

    Esercenti esercenti;
    ArrayList<User1> user1ArrayList;

    public RecyclerViewAdapter1(Esercenti esercenti, ArrayList<User1> user1ArrayList) {
        this.esercenti = esercenti;
        this.user1ArrayList = user1ArrayList;
    }

    @NonNull
    @Override
    public RecyclerViewHolder1 onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(esercenti.getBaseContext());
        View view = layoutInflater.inflate(R.layout.single_rowesercenti, parent, false);
        return new RecyclerViewHolder1(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerViewHolder1 holder, int position) {
        holder.mnomeEsercente.setText(user1ArrayList.get(position).getNomeEsercente());
        holder.mindirizzoEsercente.setText(user1ArrayList.get(position).getIndirizzoEsercente());
    }

    @Override
    public int getItemCount() {
        return user1ArrayList.size();
    }
}

还有活动

public class Esercenti extends FragmentActivity implements OnMapReadyCallback {

    FirebaseFirestore db1;
    RecyclerView mRecyclerViewEsercenti;
    ArrayList<User1> user1ArrayList;
    GoogleMap map;
    RecyclerViewAdapter1 adapter1;

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

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

        user1ArrayList = new ArrayList<>();
        setUpRecyclerView();
        setUpFirebase();
        loadDataFromFirebase();
    }

    private void loadDataFromFirebase() {

        if (user1ArrayList.size() > 0)
            user1ArrayList.clear();

        db1.collection("esercenti").get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        for (DocumentSnapshot querySnapshot : task.getResult()) {
                            User1 user1 = new User1(querySnapshot.getString("nomeEsercente"), querySnapshot.getString("indirizzoEsercente"));

                            user1ArrayList.add(user1);
                        }
                        adapter1 = new RecyclerViewAdapter1(Esercenti.this, user1ArrayList);
                        mRecyclerViewEsercenti.setAdapter(adapter1);
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(Esercenti.this, "Problema di caricamento,controlla la tua connessione!", Toast.LENGTH_SHORT).show();
                    }
                });
    }

    private void setUpFirebase() {
        db1 = FirebaseFirestore.getInstance();
    }

    private void setUpRecyclerView() {
        mRecyclerViewEsercenti = findViewById(R.id.RecyclerViewEsercenti);
        mRecyclerViewEsercenti.setHasFixedSize(true);
        mRecyclerViewEsercenti.setLayoutManager(new LinearLayoutManager(this));
    }

    @Override
    public void onPointerCaptureChanged(boolean hasCapture) {

    }

    @Override
    public void onMapReady(GoogleMap googleMap) {

        map = googleMap;
        map.setMapType(GoogleMap.MAP_TYPE_HYBRID);

        LatLng base = new LatLng(0, 0);
        map.addMarker(new MarkerOptions().position(base).title("Sede AirBc"));
        map.animateCamera(CameraUpdateFactory.newLatLng(base));
        map.animateCamera(CameraUpdateFactory.zoomIn());
    }
}

这个怎么做?先感谢您!

标签: javaandroidfirebaseandroid-recyclerviewgoogle-cloud-firestore

解决方案


您可以通过执行一些步骤来实现相同的目的。我在下面提到过。

  1. 在 RecyclerView 项目上注册点击事件。
  2. 检索该职位的模型。
  3. 在地图上为该位置设置标记。(如果您的模型中只有地址,则检索该地址的纬度/经度)

您必须对每个 RecyclerView 项目单击事件执行相同的过程。

如果您需要我提供更多信息,请告诉我。

希望这有帮助:)


推荐阅读