2016-05-26 12 views
0

Ich mache eine Anwendung, wo ich eine Liste von Kartenansichten mit einem Recyclerview zeige, und ich möchte in der Lage sein, eine Detailaktivität zu machen Der cardview der Benutzer klickt, aber ich weiß nicht, wie man den Gegenstand, der angeklickt wird, an die nächste Aktivität sendet.Wie kann ich die Informationen der Karte erhalten, die ich anklicke, um sie an die nächste Aktivität zu senden

Hier kann u mein Adapter sehen:

/** * Erstellt von alberto auf 18/05/16. */

public class EmpresasAdapter extends RecyclerView.Adapter<EmpresasAdapter.EmpresasViewHolder> 
    implements ItemClickListener{ 
private final Context context; 
private List<Empresas> items; 

public EmpresasAdapter(Context context, List<Empresas> items) { 
    this.context = context; 
    this.items = items; 
} 

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

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

@Override 
public void onBindViewHolder(EmpresasViewHolder viewHolder, int i) { 
    // Item procesado actualmente 
    Empresas currentItem = items.get(i); 

    viewHolder.nombrep.setText(currentItem.getNombre()); 
    viewHolder.descripcionp.setText(currentItem.getDescripcionC()); 
    viewHolder.franquiciap.setText(currentItem.getModalidad()+" | "+currentItem.getFranquicia()); 
    // Cargar imagen 
    Glide.with(context) 
      .load(currentItem.getImagen()) 
      .into(viewHolder.imagenp); 
} 

@Override 
public void onItemClick(View view, int position) { 
    // Imagen a compartir entre transiciones 
    View sharedImage = view.findViewById(R.id.imagenp); 
    EmpresaDetalle.launch(
      (Activity) context, position, sharedImage); 
} 

/** 
* View holder para reciclar elementos 
*/ 
public static class EmpresasViewHolder extends RecyclerView.ViewHolder 
     implements View.OnClickListener { 
    // Views para un curso 
    public ImageView imagenp; 
    public TextView nombrep; 
    public TextView descripcionp; 
    public TextView franquiciap; 
    // Interfaz de comunicación 
    public ItemClickListener listener; 

    public EmpresasViewHolder(View v, ItemClickListener listener) { 
     super(v); 
     nombrep = (TextView) v.findViewById(R.id.nombrep); 
     descripcionp = (TextView) v.findViewById(R.id.descripcionp); 
     franquiciap = (TextView) v.findViewById(R.id.Franquiciap); 


     imagenp = (ImageView) v.findViewById(R.id.imagenp); 
     v.setOnClickListener(this); 

     this.listener = listener; 
    } 

    @Override 
    public void onClick(View v) { 
     listener.onItemClick(v, getAdapterPosition()); 
    } 


} 
+0

welchen Artikel möchten Sie in der nächsten Aktivität senden? –

+0

Ich möchte die Position im Array des Cardview bekommen, so dass ich alle Informationen, die ich zeigen möchte (die gleichen Informationen, die ich in der Karte anzeigen + etwas mehr) und verwenden Sie es in meiner Detailansicht – Mihawk

Antwort

1

Legen Sie die Elemente als zusätzliche auf die Absicht der DetailedActivty für den Start:

@Override 
public void onItemClick(View view, int position) { 
    // Imagen a compartir entre transiciones 
    View sharedImage = view.findViewById(R.id.imagenp); 
    Intent intent = new Intent(context, DetailedActivty.class) 
    intent.putExtra(nombrep, NOMBREP_EXTRA); 
    intent.putExtra(descripcionp, DESCRIPCIONP_EXTRA); 
    intent.putExtra(franquiciap, FRANQUICIAP_EXTRA); 
    context.startActivity(intent); 
} 
+0

es ist da ein Weg, um die Array-Position der Karte zu erhalten, klicke ich? so kann ich es in das Extra setzen, ich frage das, weil ich mehr infor als das der Karte in der Detailaktivität zeigen will. Um die Informationen in der zweiten Aktivität zu erhalten, muss ich getExtra() verwenden, richtig? – Mihawk

+0

Ja, das stimmt. In der zweiten Aktivität sollten Sie die Informationen von getExtra() erhalten. –

+0

Ich habe das Problem, dass, wenn ich getnombreextra benutze und es in der Textansicht drucke, es wie com.example.babus.extra.NOMBRE zeigt – Mihawk

1

Ändern Sie Ihre onCreateViewHolder wie diese

public EmpresasViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.empresa_card, viewGroup, false); 
    v.setOnClickListener(new View.OnClickListener{ 
     @Override 
     public void onClick(View v){ 
      //you have the cardView in v; 
      //you can access the child view of your cardView by referring to v 
      //if you want to get the position you can do it here. 
      //Create an intent with the collected data an d start the activity 

     } 
    }); 
    return new EmpresasViewHolder(v, this); 
} 

Sie können dies auch in onBindView() Methode tun . Die Position ist mit dieser Methode leicht zugänglich. Aber das bedeutet nicht, dass Sie die Position in der früheren Methode nicht haben können. Sie können. Aber ich habe es nicht beschrieben. Wird tun, wenn Sie wollen.

//to do this its easier if you have assigned and id to the cardView in XML and store the cardView in the viewHOlder 
//getting cardView 
CardView cardView=holder.cardView; 
cardView.setOnClickListener(new View.OnClickListener{ 
    @Override 
    public void onClick(View v){ 
     //position is easily availble now. 
     //you can access the rest of the views 
     //create youtr intent and start the activity 
    } 
}); 
+0

ok, ich werde es versuchen, thx – Mihawk