0
I have a list of addresses in Recycleview and each address has its latitude and longitude coordinates retrieved from the bank. But when I click on the list item to start a route from the coordinates always brings the same in all items. What should I do? Follows my codes:
My Adapter:
    public class AdapterSolicitacoes extends RecyclerView.Adapter <AdapterSolicitacoes.MyViewHolder> {
private List<DadosSolicitacao> solicitacoes;
private Context context;
public AdapterSolicitacoes(List<DadosSolicitacao> listaSolicitacoes, Context c) {
    this.solicitacoes = listaSolicitacoes;
    this.context = c;
}
public class MyViewHolder extends RecyclerView.ViewHolder{
        TextView endereco;
        TextView material;
        TextView volume;
        Double latitude, longitude;
        public MyViewHolder(View itemView) {
            super(itemView);
            endereco = itemView.findViewById(R.id.tv_endereco);
            material = itemView.findViewById(R.id.tv_tipoMaterial);
            volume = itemView.findViewById(R.id.tv_volumeMaterial);
        }
    }
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemLista = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.adapter_lista_solicitacao, parent, false);
    return new MyViewHolder(itemLista);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    DadosSolicitacao dados = solicitacoes.get(position);
       holder.endereco.setText(dados.getEndereco());
       holder.material.setText(dados.getTipoMaterial());
       holder.volume.setText(dados.getVolumeMaterial());
}
@Override
public int getItemCount() {
    return solicitacoes.size();
}
}
Fragment where I retrieve the information and step into recycleview
   public class SolicRecebidaFragment extends Fragment {
private RecyclerView recyclerViewSolicRecebida;
private ArrayList<DadosSolicitacao> listaSolicRecebida = new ArrayList<>();
private AdapterSolicitacoes adapter;
private DatabaseReference refSolicRecebida;
private ValueEventListener valueEventoSolicitacao;
private DadosSolicitacao solicitacao;
private static final String TAG = "COORDENADAS";
private Double latitude, longitude;
public SolicRecebidaFragment() {
    // Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_solic_recebida, container, false);
    //Config.Inciais
    recyclerViewSolicRecebida = view.findViewById(R.id.recyclerView_ListaSolicitacao);
    //Referencia de recuperação de dados
    refSolicRecebida = ConfiguracaoFirebase.getFirebaseDataBase();
    //Config.Adapter
    adapter = new AdapterSolicitacoes(listaSolicRecebida, getActivity());
    //Config.RecyclerView
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
    recyclerViewSolicRecebida.setLayoutManager(layoutManager);
    recyclerViewSolicRecebida.setHasFixedSize(true);
    recyclerViewSolicRecebida.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayout.VERTICAL));
    recyclerViewSolicRecebida.setAdapter(adapter);
    // Evento de clique do Item da Lista
    eventoClickItemLista();
    return view;
}
@Override //Exibi lista ao carregar o fragment
public void onStart() {
    super.onStart();
    recuperarSolicitacao();
}
@Override // Remove lista ao sair do fragment
public void onStop() {
    super.onStop();
    refSolicRecebida.removeEventListener(valueEventoSolicitacao);
}
public void recuperarSolicitacao() {
    valueEventoSolicitacao = refSolicRecebida.child("solicitacao_coleta").orderByChild("a_SolicAtendida")
            .equalTo("nao").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    listaSolicRecebida.clear();
                    for (DataSnapshot dados : dataSnapshot.getChildren()) {
                      // Log.i("LOG3: FDADOS", dataSnapshot.getValue().toString());
                       latitude = Double.valueOf(dados.child("latitude").getValue().toString());
                       longitude = Double.valueOf(dados.child("longitude").getValue().toString());
                        solicitacao = dados.getValue(DadosSolicitacao.class);
                        listaSolicRecebida.add(solicitacao);
                    }
                    adapter.notifyDataSetChanged();
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            });
}
Click event
    public void eventoClickItemLista() {
    //Evento de click
    recyclerViewSolicRecebida.addOnItemTouchListener(
            new RecyclerItemClickListener(getActivity(), recyclerViewSolicRecebida,
                    new RecyclerItemClickListener.OnItemClickListener() {
                        @Override
                        public void onItemClick(View view, int position) {
                           //AlertDialog
    android.app.AlertDialog.Builder alertDialog = new android.app.AlertDialog.Builder(getActivity());
    // Titulo do dialogo
    alertDialog.setTitle("Iniciar rota para coleta:");
    // Mensagem do dialogo
    alertDialog.setMessage("Ir para GPS?");
    // botao ir para GPS
    alertDialog.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            //Passar Latitude e Longitude e chamar GPS
            String strUri = "http://maps.google.com/maps?q=loc:" +
                    latitude + "," + longitude;
            Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
                    Uri.parse(strUri));
            intent.setClassName("com.google.android.apps.maps",
                    "com.google.android.maps.MapsActivity");
            getActivity().startActivity(intent);
        }
    });
    // botao cancelar
    alertDialog.setNegativeButton("Não", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    // visualizacao do dialogo
    alertDialog.show();
                        }
                        @Override
                        public void onLongItemClick(View view, int position) {
                        }
                        @Override
                        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                        }
                    })
    );
}
Your click event is generic, is the msm for all items as I understood.
– Woton Sampaio
@Exactly Wotonsampaio. He is always picking up the coordinates of the last item that enters the list. I use the class you placed just below for the click event. Have some hint to make it dynamic and get the coordinates for each item?
– E FRANÇA