简体   繁体   English

获取RecyclerView的单个字符串,OnClick并将此字符串传递给Google Maps Search

[英]Take a single String of a RecyclerView, OnClick and Pass this string to a Google Maps Search

I'm implementing a google Maps Activity in my app and i'd like to give to this maps Activity a search via address. 我正在我的应用中实施谷歌地图活动,我想通过地址给这个地图活动一个搜索。 These addresses are stored in a Firestore RecyclerView and i'd like to let map show the address when the user click on one of the Firestore RecyclerView Rows... 这些地址存储在Firestore RecyclerView中,当用户点击其中一个Firestore RecyclerView行时,我想让地图显示地址...

Here's the Holder 这是持有人

 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);
    }
}

Here's the adapter 这是适配器

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();
    }
}

And there's the Activity 还有活动

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());
    }
}

How to do this? 这个怎么做? Thank you in advance! 先感谢您!

You can achieve the same by following some steps. 您可以通过以下步骤实现相同的目标。 I have mentioned below. 我在下面提到过。

  1. Register click event on RecyclerView item. 在RecyclerView项目上注册click事件。
  2. Retrieve Model for that position. 检索该位置的模型。
  3. Set marker for that location on your map. 在地图上设置该位置的标记。 (If you have only address in your model then retrieve lat/long for that address) (如果您的模型中只有地址,则检索该地址的纬度/经度)

You have to follow the same procedure on every RecyclerView item click event. 您必须在每个RecyclerView项目单击事件上执行相同的过程。

Let me know if you need something more from me. 如果你需要更多我的东西,请告诉我。

Hope this help :) 希望这有帮助:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM