[英]getAdapterPosition() returns -1 every time in OnClick() method
我被这个问题困住了:AdapterPosition 永远不会改变,当我从我的回收站点击一个项目时,它总是 -1。
public class RecyclerMapAdapter extends RecyclerView.Adapter<RecyclerMapAdapter.ViewHolder> {
Context context;
ArrayList<Features> features;
ImageLoader imageLoader;
public static String TAG = MapsActivity.class.getSimpleName();
public RecyclerMapAdapter(Context context, ArrayList<Features> features) {
this.context = context;
this.features = features;
}
@Override
public RecyclerMapAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.map_row, parent, false);
final RecyclerMapAdapter.ViewHolder viewHolder = new RecyclerMapAdapter.ViewHolder(v);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ListMapActivity mapsActivity = (ListMapActivity) context;
Intent intent = new Intent(mapsActivity, DescriptionMapActivity.class);
Features feature = features.get(viewHolder.getAdapterPosition());
MyProperties myProperties = feature.getProperties();
intent.putExtra("data", myProperties);
mapsActivity.startActivity(intent);
}
});
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Features feature = features.get(position);
MyProperties myProperties = feature.getProperties();
holder.title_map.setText(myProperties.getName());
imageLoader = ServerImageAdapter.getInstance(context).getImageLoader();
imageLoader.get(myProperties.getImage_url(),
ImageLoader.getImageListener(
holder.iv_map,//Server Image
R.mipmap.ic_launcher,//Before loading server image the default showing image.
android.R.drawable.ic_dialog_alert //Error image if requested image dose not found on server.
)
);
holder.iv_map.setImageUrl(myProperties.getImage_url(), imageLoader);
}
@Override
public int getItemCount() {
return features.size();
}
static class ViewHolder extends RecyclerView.ViewHolder{
public TextView title_map;
public TextView dist;
public NetworkImageView iv_map;
public ViewHolder(View itemView) {
super(itemView);
title_map = (TextView) itemView.findViewById(R.id.tv_map_list);
dist = (TextView) itemView.findViewById(R.id.dist_map);
iv_map = (NetworkImageView) itemView.findViewById(R.id.map_row_image);
}
}
}
为了帮助你理解上下文,我的东西是如何工作的:
我在带有标记的地图上,我可以通过单击每个标记的信息窗口来打开新活动,而且我还有一个菜单项,它打开带有所有标记的回收站视图,当我单击列表中的一个项目时,它应该打开与单击 infoWindow 时的活动相同。
除了因为 getAdapterPosition() 返回 -1,所以单击列表中的项目时,我什么都有。
我已经将这种 recyclerview 的实现用于其他用途,它工作正常,唯一的区别是片段(有效),另一个是活动(无效)。
您正在创建一个 viewHolder,对其执行操作。 但最后,您将全新的视图持有者实例发送到 RecyclerView
@Override
public RecyclerMapAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.map_row, parent, false);
final RecyclerMapAdapter.ViewHolder viewHolder = new RecyclerMapAdapter.ViewHolder(v);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ListMapActivity mapsActivity = (ListMapActivity) context;
Intent intent = new Intent(mapsActivity, DescriptionMapActivity.class);
Features feature = features.get(viewHolder.getAdapterPosition());
MyProperties myProperties = feature.getProperties();
intent.putExtra("data", myProperties);
mapsActivity.startActivity(intent);
}
});
return viewHolder;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.