I have used a CardView to display some data (data displayed by setting values to TextView ).This CarView is attached to RecyclerView. Data displayed is coming from Database and hence the CardView also increases in list depending on no of rows in Database. What I want is to get data from particular Card on onclick and I am not sure how to do that. and I also wonder that I have used same card to populate different data and the TextView also have the same Id on different Card. How do I achieve this.I want to Take Data onClick because i will use that to edit the previous Data by modifying it And i Just need the way to get Data onClick of CardView rest I can do.
My code is as:-
MedicationCard:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent" android:layout_height="match_parent"
android:padding="5dp">
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="200dp"
android:elevation="6sp"
android:background="@color/colorPrimary"
card_view:cardUseCompatPadding="true"
android:id="@+id/cardMedview">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg"
android:padding="4dp">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/NameSection">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Name:- "
android:id="@+id/textView6"
android:textColor="#0866C4"
android:textStyle="bold"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Name of Med"
android:textStyle="bold"
android:id="@+id/nameOfUpmingMed"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/textView6" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/QuntitySection"
android:layout_below="@+id/NameSection"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textStyle="bold"
android:text="Quantity:- "
android:textColor="#0866C4"
android:id="@+id/textView5"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="crocin"
android:layout_marginLeft="3dp"
android:id="@+id/QuantOfMed"
android:textColor="#000"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/textView5" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textStyle="bold"
android:text="Reffil Amount:- "
android:id="@+id/textView7"
android:textColor="#0866C4"
android:layout_marginStart="18dp"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/QuantOfMed" />
<TextView
android:layout_width="80dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="222"
android:textColor="#000"
android:id="@+id/ReffilAmt"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/textView7" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/expirationSection"
android:layout_below="@+id/QuntitySection">
<TextView
android:layout_width="wrap_content"
android:textStyle="bold"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Expiration Date:- "
android:textColor="#0866C4"
android:id="@+id/textView8"/>
<TextView
android:layout_width="150dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="XX/YY/ZZZZ"
android:textColor="#000"
android:id="@+id/ExpDate"
android:layout_marginLeft="3dp"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/textView8" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/DaysSection"
android:layout_below="@+id/expirationSection">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:textStyle="bold"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Days:- "
android:textColor="#0866C4"
android:id="@+id/textView11" />
<TextView
android:layout_width="250dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="MON,TUE,WED,THU,FRI,SAT,SUN"
android:id="@+id/NoOfDays"
android:textColor="#000"
android:layout_marginLeft="3dp"
android:layout_alignTop="@+id/textView11"
android:layout_toEndOf="@+id/textView11" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/TimeSection"
android:layout_below="@+id/DaysSection">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Time:- "
android:textColor="#0866C4"
android:id="@+id/textView9"
/>
<TextView
android:layout_width="70dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="08:00 AM"
android:textColor="#000"
android:layout_marginLeft="3dp"
android:id="@+id/timeMorning"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/textView9" />
<TextView
android:layout_width="70dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="01:00 PM"
android:textColor="#000"
android:layout_marginLeft="4dp"
android:id="@+id/timeAfternoon"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="70dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="08:00 PM"
android:textColor="#000"
android:id="@+id/timeEvening"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginEnd="49dp" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/InstructionSection"
android:layout_below="@+id/TimeSection">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Instructions:- "
android:textColor="#0866C4"
android:textStyle="bold"
android:layout_marginTop="2dp"
android:id="@+id/textView10"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_marginTop="2dp"
android:textColor="#000"
android:text="Take Medicine before bed and after the food.and he shuld take agood sound sleep and shuld wake up early in morning"
android:id="@+id/SpecialInst"
android:layout_toEndOf="@+id/textView10" />
</RelativeLayout>
</RelativeLayout>
</android.support.v7.widget.CardView>
</RelativeLayout>
My fragment which is using RecyclerView to populate data on Card view.
PrescriptionFragment
public class PrescriptionFragment extends Fragment {
private Context context;
private RecyclerView recyclerView;
DatabaseAdaptor databaseAdaptor;
public PrescriptionFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_prescription, container, false);
recyclerView = (RecyclerView)view.findViewById(R.id.recyclerView);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
recyclerView.setLayoutManager(linearLayoutManager);
context=getActivity();
databaseAdaptor = new DatabaseAdaptor(context);
initializeData();
initializeAdapter();
return view;
}
private void initializeData(){
databaseAdaptor.getDetailData();
}
private void initializeAdapter(){
RVAdapter adapter = new RVAdapter(databaseAdaptor.persons);
recyclerView.setAdapter(adapter);
}
@Override
public void onResume() {
super.onResume();
initializeData();
initializeAdapter();
}
}
RecyclerViewAdapter:
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {
public static class PersonViewHolder extends RecyclerView.ViewHolder{
CardView cardView;
TextView Name,Qunat,refill,expDate,Days,moring,after,evening,inst;
public PersonViewHolder(View itemView) {
super(itemView);
cardView=(CardView)itemView.findViewById(R.id.cardMedview);
Name=(TextView)itemView.findViewById(R.id.nameOfUpmingMed);
Qunat=(TextView)itemView.findViewById(R.id.QuantOfMed);
refill=(TextView)itemView.findViewById(R.id.ReffilAmt);
expDate=(TextView)itemView.findViewById(R.id.ExpDate);
Days=(TextView)itemView.findViewById(R.id.NoOfDays);
moring=(TextView)itemView.findViewById(R.id.timeMorning);
after=(TextView)itemView.findViewById(R.id.timeAfternoon);
evening=(TextView)itemView.findViewById(R.id.timeEvening);
inst=(TextView)itemView.findViewById(R.id.SpecialInst);
}
}
List<Person> persons;
RVAdapter(List<Person> persons){
this.persons=persons;
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
@Override
public PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.medication_card, parent, false);
PersonViewHolder pvh = new PersonViewHolder(v);
return pvh;
}
@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
personViewHolder.Name.setText(persons.get(i).name);
personViewHolder.Qunat.setText(persons.get(i).qunt);
personViewHolder.refill.setText(persons.get(i).refill);
personViewHolder.expDate.setText(persons.get(i).date);
personViewHolder.Days.setText(persons.get(i).days);
personViewHolder.moring.setText(persons.get(i).morning);
personViewHolder.after.setText(persons.get(i).after);
personViewHolder.evening.setText(persons.get(i).evening);
personViewHolder.inst.setText(persons.get(i).inst);
}
@Override
public int getItemCount() {
return persons.size();
}
}
Person Class
class Person{
String name,qunt,refill,inst,date,days,morning,after,evening;
Person(String name,String quant,String refill,String date,String days,String morn,String Aft,String evening,String inst){
this.name=name;
this.qunt=quant;
this.refill=refill;
this.date=date;
this.days=days;
this.morning=morn;
this.after=Aft;
this.evening=evening;
this.inst=inst;
}
}
And finally my Database which from which i am populating Data.
public List<Person> getDetailData(){
SQLiteDatabase db= helper.getWritableDatabase();
String[] columns={DatabaseHelper.medicationId,DatabaseHelper.medicName,DatabaseHelper.medicationQuant,DatabaseHelper.expirationDate,
DatabaseHelper.RiffilAmount,DatabaseHelper.specialInst,DatabaseHelper.alarmDays,DatabaseHelper.timeMorning,
DatabaseHelper.timeAfternoon,DatabaseHelper.timeEvening};
Cursor mcursor= db.query(DatabaseHelper.MEDICATION_DETAILS_TABLE, columns, null, null, null, null, null);
persons=new ArrayList<>();
StringBuffer buffer=new StringBuffer();
while (mcursor.moveToNext()){
int index1= mcursor.getColumnIndex(DatabaseHelper.medicationId);
int index2=mcursor.getColumnIndex(DatabaseHelper.medicName);
int index3=mcursor.getColumnIndex(DatabaseHelper.medicationQuant);
int index4=mcursor.getColumnIndex(DatabaseHelper.expirationDate);
int index5=mcursor.getColumnIndex(DatabaseHelper.RiffilAmount);
int index6=mcursor.getColumnIndex(DatabaseHelper.specialInst);
int index7=mcursor.getColumnIndex(DatabaseHelper.alarmDays);
int index8=mcursor.getColumnIndex(DatabaseHelper.timeMorning);
int index9=mcursor.getColumnIndex(DatabaseHelper.timeAfternoon);
int index10=mcursor.getColumnIndex(DatabaseHelper.timeEvening);
int medid=mcursor.getInt(index1);
String name=mcursor.getString(index2);
String quant=mcursor.getString(index3);
String expDate=mcursor.getString(index4);
String refill=mcursor.getString(index5);
String specialInst=mcursor.getString(index6);
String alarmdays=mcursor.getString(index7);
String timemorning=mcursor.getString(index8);
String timeafter=mcursor.getString(index9);
String timeevening= mcursor.getString(index10);
persons.add(new Person(name,quant,refill,expDate,alarmdays,timemorning,timeafter,timeevening,specialInst));
}
mcursor.close();
db.close();
return persons;
}
