0

Ich habe erstellt CardView RecycleVeiw in Android verwendet jetzt will ich Absicht in recyleview für jeden einzelnen jedes Element von cardivew freundlich leite mich hinzuzufügen: Schuss Bildschirm hier meiner Forderung: Like that is a cardiview and i wanna to add intent to each item mein Adapter Klassencode ist hier gegeben:Wie startet man eine neue Absicht für jedes ganze CardView in RecycleView android?

public class MapAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

private static final int TYPE_HEADER = 0; 
private static final int TYPE_ITEM = 1; 
private List<MapSetData> venues; 
public Context context; 


public MapAdapter(List<MapSetData> venues, Context context) { 
    this.venues = venues; 
    this.context = context; 
    } 

@Override 
public VenuesViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.map_item, viewGroup, false); 
    VenuesViewHolder pvh = new VenuesViewHolder(v); 
    return pvh; 
} 


@Override 
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { 
    VenuesViewHolder holder = (VenuesViewHolder) viewHolder;     holder.venues_picture.setImageResource(venues.get(position).venue_picture); 
     holder.card_title_txt.setText(venues.get(position).card_title_txt); 
     holder.location_qs.setText(venues.get(position).location_qs); 
} 


@Override 
public int getItemViewType(int position) { 
    if (isPositionHeader(position) == 0) { 
     return TYPE_HEADER; 
    } else if (isPositionHeader(position) == 1) { 
     return TYPE_ITEM; 
    } else { 
     return 0; 
    } 
} 

private int isPositionHeader(int position) { 
    return position; 
} 


@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
    super.onAttachedToRecyclerView(recyclerView); 
} 

@Override 
public int getItemCount() { 
    return venues.size(); 

} 

public static class ViewHolder extends RecyclerView.ViewHolder { 
    public ViewHolder(View v) { 
     super(v); 
    } 
} 

public class VenuesViewHolder extends ViewHolder implements View.OnClickListener { 
    ImageView venues_picture; 
    TextView card_title_txt; 
    TextView location_qs; 
    CardView cv; 
    public Context context; 

    public VenuesViewHolder(View v) { 
     super(v); 
     v.setOnClickListener(this); 
     context = v.getContext(); 
     cv = (CardView) itemView.findViewById(R.id.cv); 
     venues_picture = (ImageView) itemView.findViewById(R.id.match_picture); 
     card_title_txt = (TextView) itemView.findViewById(R.id.card_title_txt); 
     location_qs = (TextView) itemView.findViewById(R.id.location_qs); 
    } 

    @Override 
    public void onClick(View v) { 

     Intent intent = new Intent(context, MapDetails.class); 
     context.startActivity(intent); 
    } 
} 
} 
+0

es hat fast fertig. 'setOnClickListener (this)' für jede Kartenansicht. Beispiel: 'locations_picture.setOnClickListener (this)' und in der Methode 'onClick (View v)' check-ID 'if (v.getId() == R.id.match_picture) {// mach etwas}'. –

+0

nicht jedes einzelne Element von cardview, aber jedes Element in recycleview wie ganze cardview touch listener ich hoffe, meine Frage –

+0

zu bekommen, wenn es das ganze cardview ist, stellen 'cv.setOnClickListener (dieses)'. Sie können getAdapterPosition() verwenden, um die Position für eine unterschiedliche Kartenansicht zu überprüfen. –

Antwort

0

Vielen Dank an alle, löste ich mein Problem wie dieses,

public VenuesViewHolder(View v) { 
     super(v); 
     context = v.getContext(); 
     cv = (CardView) itemView.findViewById(R.id.cv); 
     venues_picture = (ImageView) itemView.findViewById(R.id.match_picture); 
     card_title_txt = (TextView) itemView.findViewById(R.id.card_title_txt); 
     location_qs = (TextView) itemView.findViewById(R.id.location_qs); 
     v.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int pos = getAdapterPosition(); 
       if (pos == 0) { 
        context.startActivity(new Intent(context, MapDetails.class)); 
       } else if (pos == 1) { 
        context.startActivity(new Intent(context, MapDetailsTwo.class)); 
       } else if (pos == 2) { 
        context.startActivity(new Intent(context, MapDetails.class)); 
       } 
      } 
     }); 
    } 
0

Versuchen Sie dies!

@Override 
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { 
     VenuesViewHolder holder = (VenuesViewHolder) viewHolder;        
holder.venues_picture.setImageResource(venues.get(position).venue_picture); 
      holder.card_title_txt.setText(venues.get(position).card_title_txt); 
      holder.location_qs.setText(venues.get(position).location_qs); 

    holder.v.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(context, MapDetails.class); 
      context.startActivity(intent); 
       } 
      }); 

    } 
+0

Ja sicher werde ich das versuchen. –

+0

würdest du bitte sagen, was holder.v ist. Ich meine, was ist "v" hier? –

+0

v ist View, die Sie im Konstruktor von ViewHolder übergeben – TUSHAR

0

Sie können wie diese auf Ihre cardview gesetzt OnClickListener

public class VenuesViewHolder extends ViewHolder implements View.OnClickListener { 
ImageView venues_picture; 
TextView card_title_txt; 
TextView location_qs; 
CardView cv; 
public Context context; 

public VenuesViewHolder(View v) { 
    super(v); 
    v.setOnClickListener(this); 
    context = v.getContext(); 
    cv = (CardView) itemView.findViewById(R.id.cv); 
    venues_picture = (ImageView) itemView.findViewById(R.id.match_picture); 
    card_title_txt = (TextView) itemView.findViewById(R.id.card_title_txt); 
    location_qs = (TextView) itemView.findViewById(R.id.location_qs); 
} 

@Override 
public void onClick(View v) { 
    int viewId = v.getId(); 
    switch(viewId){ 
     case R.id.cv : 
     Intent intent = new Intent(context, MapDetails.class); 
     context.startActivity(intent); 
      break; 
    } 


} 
} 
+0

zu bekommen, wenn ich einen anderen Fall hinzufüge switch statement dann wie ich das hinzufügen werde, weil R.id.cv nur eine cardview wahr ist? –

+0

'switch (viewId) { Fall R.id.cv: Absicht intent = new Intent (Kontext, MapDetails.class); context.startActivity (Absicht); Pause; Fall R.id.match_picture: Absicht intent = new Intent (Kontext, MapDetails.class); context.startActivity (Absicht); Pause; } ' – SaravInfern

+0

Ihre Antwort ist gut, aber ich muss Absicht zu jeder Position in recycleview hinzufügen, die cardview ist das einzelne Element von recycleview, also möchte ich Absicht recyclew Element nicht hinzufügen cardview –

0

try Code unten,

@Override 
    public void onClick(View v) { 

     Intent intent; 

     switch (isPositionHeader) 
     { 
      case 0: 
      if(v.getId()==R.id.match_picture) 
         intent = new Intent(context, MapDetails.class); 

      else if(v.getId()==R.id.card_title_txt) 
         intent = new Intent(context, CardTitle.class); 
      break; 



      case 1: 
      if(v.getId()==R.id.match_picture) 
         intent = new Intent(context, MapDetails1.class); 

      else if(v.getId()==R.id.card_title_txt) 
         intent = new Intent(context, CardTitle1.class); 
      break; 

      // And So 

     } 

    if(intent != null) 
      startActivity(intent); 
    } 
+0

isPositionHeader nicht hier gelöst –

+0

legen Sie es als öffentliches, wie derzeit ist es privat wie "private int isPositionHeader()" – Vickyexpert

+0

Ihre Antwort auch für jedes Element von cardview Ich brauche ganze cardview Touch-Listener, der in recycleview ist –

Verwandte Themen