2016-10-31 3 views
0

сегодня я застрял в этой проблеме: 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 для чего-то еще, и он отлично работает, единственное отличие состоит в том, что это фрагмент (который работает), а другой - активность (этого не делает).

Любое решение? скажите мне, нужно ли вам больше кода или логарифма.

+0

'окончательный RecyclerMapAdapter.ViewHolder viewHolder' не используется адаптер – pskink

+0

Что вы имеете в виду? Я использую его в методе onClick. Разве это? –

+0

вы просто создаете его, но ваш адаптер использует 'ViewHolder', который возвращается методом' onCreateViewHolder', поэтому вы всегда получаете -1 ('RecyclerView.NO_POSITION') – pskink

ответ

1

Вы создали 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; 
} 
+0

О да, черт возьми, я глуп. Давайте попробуем это. EDIT: Он работает! благодарю youuuuuu –

Смежные вопросы