androidandroid-sqliteandroid-maps

How to store Recycleview items into variables


I have an android app, that displays SQLite data in a recycle view and card view,

I want to use this data as parameters ( dynamicly based on item position ) for click activity to show maps based on 2 items ( loaded from database ) latitude and longitude , i am using a button like this inside onBindHolder :

    

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.mymy.Model.Sites;
import com.example.mymy.R;

import java.util.List;

class SearchViewHolder extends RecyclerView.ViewHolder {

    public TextView sitecode;
    public TextView address,lonit,latit,note;
    public Button visitLocation;


    public SearchViewHolder(@NonNull View itemView) {
        super(itemView);
        sitecode = (TextView) itemView.findViewById(R.id.s_sitecode);
        address = (TextView) itemView.findViewById(R.id.s_address);
        lonit = (TextView) itemView.findViewById(R.id.s_londit);
        latit = (TextView) itemView.findViewById(s_latit);
        note = (TextView) itemView.findViewById(R.id.s_note);
        
        visitLocation = (Button) itemView.findViewById(R.id.Launch_bt);

    }
}
public class SearchAdapter extends RecyclerView.Adapter<SearchViewHolder> {

    private Context context;
    private List<Sites> sitesList;
    
    public SearchAdapter ( Context context, List<Sites> sitesList) {
        this.context = context;
        this.sitesList = sitesList;
    }

    @Override
    public SearchViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View itemView = inflater.inflate(R.layout.layout_item,parent,false);

        return new SearchViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull SearchViewHolder holder, int position) {
        holder.sitecode.setText(sitesList.get(position).getSitecode());
        holder.address.setText(sitesList.get(position).getAddress());
        holder.lonit.setText(sitesList.get(position).getLonit());
        holder.latit.setText(sitesList.get(position).getLatit());
        holder.note.setText(sitesList.get(position).getNote());
        

    holder.visitLocation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Intent.ACTION_VIEW);

                intent.setData(Uri.parse("geo:32.319366,36.236719")); //36.236719  32.319366

                context.startActivity(intent);
            }
        });
    }

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

Solution

  • Try one of these two:

    You can either get it from the TextView in the cardview like so:

    String label = " (any label you want)"
    String strUri = "http://maps.google.com/maps?q=loc:" + holder.latit.getText()+ "," + holder.lonit.getText() + label;
    intent.setData(strUri);
    

    or you can get it from your list using the position like so:

    String label = " (any label you want)"
    int pos = holder.getAdapterPosition();
    String strUri = "http://maps.google.com/maps?q=loc:" + sitesList.get(pos).getLatit() + "," + sitesList.get(pos).getLonit() + label;
    Uri locationUri = Uri.parse(strUri)
    intent.setData(locationUri);
    

    I'm not sure but I think label is optional in both approaches.