2016-04-25 8 views
1

ich wan eine OnClickListener zu einem CardView zu befestigen, also kann ich die ID aus der KarteIn der CardView OnClickListner und erhalten Daten

Ich habe einen RecyclerView erhalten, die für die Anzeige der Karten einen benutzerdefinierten Adapter. So ist es implementiert.

Ich versuchte andere Beispiele in Stackoverflow, aber es hat nicht funktioniert.

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> { 
private ArrayList<Patient> patients; 
Context mContext; 
String idPatient; 

public CardAdapter(ArrayList<Patient> patients) { 
    this.patients = patients; 
    } 

     @Override 
public CardAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_card_view, viewGroup, false); 
    return new ViewHolder(view); 
    } 

@Override 
public void onBindViewHolder(CardAdapter.ViewHolder viewHolder, int i) { 

    viewHolder.first_name.setText(patients.get(i).getFirstName()); 
    viewHolder.last_name.setText(patients.get(i).getLastName()); 
    viewHolder.id_patient.setText(String.valueOf(patients.get(i).getId())); 

    viewHolder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //trying to get ID From card 
      ViewGroup parentView = (ViewGroup)v.getParent(); 
      TextView idpatientview =(TextView)parentView.findViewById(R.id.idViewPatient); 
      idPatient = idpatientview.getText().toString(); 
      PreferencesHelper.save(mContext, "idPatient", idPatient); 
      Intent intent = new Intent(mContext, BluetoothActivity.class); 
      mContext.startActivity(intent); 

     } 
    }); 

    } 

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

public class ViewHolder extends RecyclerView.ViewHolder{ 
      private TextView first_name,last_name,id_patient; 
    public ViewHolder(View view) { 
     super(view); 

     first_name = (TextView)view.findViewById(R.id.textViewName); 
     last_name = (TextView)view.findViewById(R.id.textViewLastName); 
     id_patient = (TextView)view.findViewById(R.id.idViewPatient); 

    } 
     } 
       } 
+0

Mit der ID bekommen Sie die Position? –

+0

@DavidSeroussi Nein, ich meine, ich bekomme die ID des Patienten von der Karte oder sogar seinen Namen, weil ich es in einer anderen Aktivität verwenden muss, ich bekomme die Daten von Restfull-Service übrigens. –

+0

Ja, aber wie ich sehen kann, verwenden Sie eine ArrayList, um die Karte zu füllen, was bedeutet, wenn Sie die Position der Karte erhalten, können Sie sie als Index verwenden, um die Daten von dieser Karte –

Antwort

1

Wenn Ihr onClick Methode in Ihrem onBindViewHolder ist, dann können Sie die aktuellen Daten erhalten direkt

String first_name = patients.get(i).getFirstName(); 
String last_name = patients.get(i).getLastName(); 
String id_patient = String.valueOf(patients.get(i).getId()); 

in Ihrem OnClickListener, die ID des Patienten auf die geklickt Karte entspricht, ist einfach id_patient, die Vorname ist first_name und der Nachname ist last_name. Sie können nun die Daten an Ihre Aktivität übergeben (z. B. mit einer Schnittstelle)

+0

Zeichenfolge id_patient = viewHolder.id_patient.setText (String.valueOf (patienten.get (i) .getId())); die setText ihre Rückkehr ist ungültig Ich kann es nicht auf eine Zeichenfolge auswirken –

+1

Ja manchmal mache ich die Dinge ein bisschen zu schnell, lass mich das korrigieren –

+1

Es sollte jetzt gut sein –

Verwandte Themen