最初,我有一个 ListView 为我完成这项工作,我会在 onCreate 主类中如下设置 clicklistener 和 long licklistener:
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent i = new Intent(getApplicationContext(), UserFeed.class);
i.putExtra("venueName", businessList.get(position).name);
i.putExtra("companyId",businessList.get(position).id);
i.putExtra("canWrite", checkedIn);
i.putExtra("Lat",businessList.get(position).anchorpt.getLatitude());
i.putExtra("Lon",businessList.get(position).anchorpt.getLongitude());
i.putExtra("NotType",venueType);
startActivity(i);
}
});
listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long l) {
Double Lat = businessList.get(position).anchorpt.getLatitude();
Double Lon = businessList.get(position).anchorpt.getLongitude();
ArrayList<Marker> markers = new ArrayList<>();
LatLngBounds.Builder builder = new LatLngBounds.Builder();
mMap.clear();
markers.add(mMap.addMarker(new MarkerOptions().position(new LatLng(point.getLatitude(), point.getLongitude()))
.icon(BitmapDescriptorFactory.defaultMarker())
.title("My Location")
.visible(false)));
markers.add(mMap.addMarker(new MarkerOptions().position(new LatLng(Lat, Lon))
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE))
.visible(true)));
for (Marker marker : markers){
builder.include(marker.getPosition());
}
LatLngBounds bounds = builder.build();
int padding = 100;
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds,padding);
mMap.animateCamera(cu);
return true;
}
});
我正在尝试对 recyclerview 执行相同的方法,但没有成功。我可以在 recylcerviewadapter 中完成,但我不确定如何添加标记。它看起来像这样:
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{
public TextView tvName,tvDistance,tvAgeRange,tvUserCount,tvGenderRatio,tvTimeDetails;
public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
//itemView.setOnLongClickListener(this);
tvName = (TextView) itemView.findViewById(R.id.venueName);
tvDistance = (TextView) itemView.findViewById(R.id.textDistance);
tvAgeRange = (TextView) itemView.findViewById(R.id.textAgeRange);
tvUserCount = (TextView) itemView.findViewById(R.id.textUserCount);
tvGenderRatio = (TextView) itemView.findViewById(R.id.textGenderRatio);
tvTimeDetails = (TextView) itemView.findViewById(R.id.whenLitOccurs);
}
@Override
public void onClick(View view) {
//context.startActivity(new Intent(context, UserFeed.class));
int row = getAdapterPosition();
Log.i("AppInfo","Item clicked"+ items.get(row));
Intent i = new Intent(context, UserFeed.class);
i.putExtra("venueName", items.get(row).name);
i.putExtra("companyId",items.get(row).id);
//i.putExtra("canWrite", checkedIn);
i.putExtra("Lat",items.get(row).anchorpt.getLatitude());
i.putExtra("Lon",items.get(row).anchorpt.getLongitude());
//i.putExtra("NotType",venueType);
context.startActivity(i);
}
@Override
public boolean onLongClick(View view) {
//Add a marker to map
return true;
}
}
我正在使用谷歌地图 v2。
最佳答案
不要在 adapter 中执行任何密集操作,而是使用回调方法(例如:接口(interface))将点击和长按事件传输到 mainactivity
第 1 步:为 clickListener 创建接口(interface)。
public interface CustomAdapterClickListener {
public void onItemClick(View v, int position);}
第 2 步:在 recylcerview 的构造函数的帮助下,将 MainActivity 引用分配给接口(interface)。
public class RecylcerAdapter extends extends RecyclerView.Adapter<>{
public RecylcerAdapter(Context context, ArrayList<> list,
final CustomAdapterClickListener clickListener) {
this.context = context;
inflator = LayoutInflater.from(context);
this.list = list;
this.clickListener = clickListener;
}
}第三步:在adapter的onClicks方法中调用该接口(interface)方法
@Override
public void onClick(View v) {
clickListener.onItemClick(v,(int)v.getTag());
}
第四步:在MainActivity中实现接口(interface)
public class MaiActivity extends AppCompatActivity implements CustomAdapterClickListener{
@Override
public void onItemClick(View v, int position) {
// now you have the list item position as well as view , get the adapter data based on the postion
// add marker with the help of googlemap instance .()
}
关于android - RecyclerView OnClick 通过 intent 长按添加标记到 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40458919/