2016-04-18 29 views
0

Ich versuche eine neue Aktivität zu starten, wenn der Benutzer auf ein RecycleView-Element klickt. Das Problem ist, dass nur ein Objektfeld, das ich an JSON übergeben möchte, im row_item-Layout angezeigt wird und ich nicht weiß, wie die anderen 3 Objektfelder abgerufen werden.Aktivität von ViewHolder starten onclick

Hier sind die Schritte, denen ich folge.

Zuerst sende ich eine Liste von Objekten (Poliza) an den Adapter. Zweitens zeige ich nur ein Feld des Objekts (Poliza) in der RecycleView. Drittens möchte ich eine neue Aktivität starten, wenn der Benutzer auf das RecycleView-Element klickt und ein JSON des Objekts mit den anderen Objektfeldern sendet, die nicht im row_item angezeigt werden.

Hier mein Adapter ist

public class PolizasAdapter extends RecyclerView.Adapter<PolizasAdapter.PolizaViewHolder> { 

    private List<Poliza> listapoliza = null; 
    private Context context; 

    public PolizasAdapter( List<Poliza> listapoliza) { 
     this.listapoliza = listapoliza; 
    } 

    public class PolizaViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     // each data item is just a string in this case 
     TextView txtPoliza; 

     public PolizaViewHolder(View view) { 
      super(view); 
      //Agregamos un onclickListener 
      view.setOnClickListener(this); 
      context = view.getContext(); 
      //Hacemos referencia a las vistas del rowitem 
      txtPoliza = (TextView) view.findViewById(R.id.txt_poliza); 
     } 

     @Override 
     public void onClick(View view) { 
      //Evento que que se genera cuando se da click 
      TextView texto = (TextView) view.findViewById(R.id.txt_poliza); 
      String str = texto.getText().toString(); 
      System.out.println(str); 
      //Iniciamos actividad mostrando el detalle 

      Intent intent = new Intent(context , DetalleActivity.class); 
      intent.putExtra("id_poliza",str); 
      //Whats next ? 
      //How to add the other 3 fields of my object to the putExtra 


     } 
    } 

    @Override 
    public PolizasAdapter.PolizaViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     //Creamos una nueva vista 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item, parent, false); 
     PolizaViewHolder viewHolder = new PolizaViewHolder(view); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(PolizasAdapter.PolizaViewHolder holder, int position) { 

     holder.txtPoliza.setText("Poliza : " + String.valueOf(listapoliza.get(position).getPoliza())); 
    } 

    ) 
    @Override 
    public int getItemCount() { 
     return listapoliza.size(); 
    } 
} 
+0

'context.startActivity (Vorsatz);' – adnbsr

+0

Sie die ganze Liste Aktivität passieren können und die Liste der Aktivitäten abrufen und das Objekt filtern. – Sanjeev

Antwort

2

für die Aktivität starten Sie Was die 3 JSON-Parameter über Sie sprechen, konnte ich keinen Hinweis von ihnen in Ihrem Code finden (es gibt tun sollten kein Hinweis auf irgendeinen JSON). Ich nehme an, Sie sprechen vielleicht über ein Feld von Poliza-Objekt, aber ich kann mir nicht sicher sein.

+0

Genau diese Felder stammen vom Objekt. Ich möchte das Objekt im On-Klick abrufen. – jckhan

+2

Der richtige Ort, um das Poliza-Objekt an eine Aktion zu binden, wäre der onBindViewHolder, der die Ansicht an ihr Datenelement bindet. Im Moment setzen Sie nur den Text eines Felds innerhalb des ViewHolders, aber Sie könnten eine Methode im ViewHolder erstellen, die ein Poliza-Objekt als Parameter verwendet und dann einen Verweis darauf im ViewHolder hält, damit Sie es abrufen können in der onClick-Methode. Eine andere Option wäre, dass Sie anstelle einer Referenz eine letzte Variable verwenden und onClick als anonyme Klasse festlegen können, so dass Sie innerhalb der Loader-Methode auf diese Variable zugreifen können. –

+0

Dank Jonatan war die Untersuchung des BindViewHolders die Lösung. – jckhan

0

Verwenden Aktivität Kontext

Intent intent = new Intent(context,AnotherActivity.class); 
context.startActivity(intent); 
Verwandte Themen