сегодня я застрял в этой проблеме: AdapterPosition никогда не изменяется, когда я нажимаю элемент из моего recyclerview, он всегда равен -1.getAdapterPosition() возвращает -1 каждый раз в методе OnClick()
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);
}
}
}
Чтобы помочь вам понять контекст вот как работает мой материал: я на карте с маркерами, я могу открыть новый acivity, нажав InfoWindow для каждых маркеров, и у меня также есть пункт меню Wich откройте recyclerview со всеми маркерами, и когда я нажимаю на элемент из списка, он должен открыть ту же активность, что и при нажатии на infoWindow. У меня есть все, за исключением случаев, когда я нажимаю на элемент из списка, потому что getAdapterPosition() возвращает -1. Я уже использую такую реализацию recyclerview для чего-то еще, и он отлично работает, единственное отличие состоит в том, что это фрагмент (который работает), а другой - активность (этого не делает).
Любое решение? скажите мне, нужно ли вам больше кода или логарифма.
'окончательный RecyclerMapAdapter.ViewHolder viewHolder' не используется адаптер – pskink
Что вы имеете в виду? Я использую его в методе onClick. Разве это? –
вы просто создаете его, но ваш адаптер использует 'ViewHolder', который возвращается методом' onCreateViewHolder', поэтому вы всегда получаете -1 ('RecyclerView.NO_POSITION') – pskink