2016-10-31 6 views
0

heute bin ich mit diesem Problem fest: die Adapterposition ändert sich nie, wenn ich auf ein Element aus meiner Recyclerview klicken, ist es immer -1.getAdapterPosition() liefert immer -1 in OnClick() Methode

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); 

     } 
    } 
} 

Sie aus dem Zusammenhang hier um zu verstehen, ist, wie meine Sachen funktioniert: ich mit Markierungen auf einer Karte bin ich durch Klicken auf die Infofenster für jeden Marker neue Akivität öffnen kann, und ich habe auch eine wich Menüpunkt öffne die Recycleransicht mit allen Markern und wenn ich auf einen Gegenstand in der Liste klicke, sollte er die gleiche Aktivität öffnen, wie wenn ich auf InfoWindow geklickt habe. Ich habe alles außer, wenn ich auf ein Element aus der Liste klicke, weil getAdapterPosition() -1 zurückgibt. Ich benutze diese Art der Implementierung von recyclerview bereits für etwas anderes und es funktioniert gut, der einzige Unterschied ist, ist ein Fragment (was funktioniert) und das andere ist Aktivität (was nicht).

Irgendeine Lösung? Sag mir, ob du mehr Code oder Logcat brauchst.

+0

'final RecyclerMapAdapter.ViewHolder viewHolder' nicht von Ihrem Adapter verwendet wird – pskink

+0

Was meinen Sie? Ich benutze es in OnClick-Methode. Ist es gut? –

+0

Sie erstellen es nur, aber Ihr Adapter verwendet den 'ViewHolder', der von' onCreateViewHolder' Methode zurückgegeben wird, deshalb erhalten Sie immer -1 ('RecyclerView.NO_POSITION') – pskink

Antwort

1

Sie erstellt einen ViewHolder, Ausführen von Operationen darauf. aber am Ende wurden Senden Sie völlig neue Instanz Sichthalter 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

Oh yeah, verdammt, ich bin dumm. Lass uns das versuchen. EDIT: Es funktioniert! Danke, duuuuuu –