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