Re usability of code is the need of the hour. RecyclerView that was introduced by google helps us populate data in custom lists.
Google’s card UI enforces recycler view. It is relatively simple once you get a hang of it.
Volley is an HTTP library that makes the process of fetching JSONs faster and with minimal or no memory leaks.
You can watch the video for a brief on Volley.
We add the following to the build.gradle file of the app
dependencies { compile 'com.android.support:appcompat-v7:23.4.0' compile "com.android.support:recyclerview-v7:23.0.1" compile 'com.android.volley:volley:1.0.0' }
Now in the res file of the main activity or the file you want to populate the recycler view add the following
<android.support.v7.widget.RecyclerView android:id="@+id/my_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" />
Then we create a model class for an object that can encompass the datas we get from json
Let’s say we need each card to display a picture and a text of a movie.
We create a model class called DoctorList.
public class DoctorList { String DoctorName; String Rating; String Qualification; String Experience; String Specialization; public String getDoctorName() { return DoctorName; } public void setDoctorName(String doctorName) { DoctorName = doctorName; } public String getRating() { return Rating; } public void setRating(String rating) { Rating = rating; } public String getQualification() { return Qualification; } public void setQualification(String qualification) { Qualification = qualification; } public String getExperience() { return Experience; } public void setExperience(String experience) { Experience = experience; } public String getSpecialization() { return Specialization; } public void setSpecialization(String specialization) { Specialization = specialization; } }
In DoctorListViewAdapter.java we add the following:-
public class DoctorListViewAdapter extends RecyclerView.Adapter<DoctorListViewAdapter.ViewHolder> { Context context; RecyclerViewItemClickInterface recyclerViewItemClickInterface; callnowInterface anInterface; List<DoctorList> doctorList; public DoctorListViewAdapter(List<DoctorList> doctorList, Context context) { super(); this.doctorList=doctorList; this.context = context; recyclerViewItemClickInterface =(RecyclerViewItemClickInterface) context; anInterface =(callnowInterface)context; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.doctor_list, parent, false); ViewHolder viewHolder= new ViewHolder(v); return viewHolder; } @Override public void onBindViewHolder(ViewHolder holder, final int position) { DoctorList doctorList1 = doctorList.get(position); holder.Doctorname.setText(doctorList1.getDoctorName()); holder.Qulifications.setText(doctorList1.getQualification()); holder.recyclerid.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String name = doctorList.get(position).getDoctorName(); String experince = doctorList.get(position).getExperience(); String qualification = doctorList.get(position).getQualification(); String rating = doctorList.get(position).getRating(); String specialization = doctorList.get(position).getSpecialization(); Intent intent = new Intent(context, DoctorProfileActivitty.class); intent.putExtra("name",name); intent.putExtra("experince",experince); intent.putExtra("qualification",qualification); intent.putExtra("rating",rating); intent.putExtra("specialization",specialization); context.startActivity(intent); } }); holder.bookappntment.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String name = doctorList.get(position).getDoctorName(); String experince = doctorList.get(position).getExperience(); String qualification = doctorList.get(position).getQualification(); String rating = doctorList.get(position).getRating(); String specialization = doctorList.get(position).getSpecialization(); Intent intent = new Intent(context, BookAppoimnetActivity.class); intent.putExtra("name",name); intent.putExtra("experince",experince); intent.putExtra("qualification",qualification); intent.putExtra("rating",rating); intent.putExtra("specialization",specialization); context.startActivity(intent); //recyclerViewItemClickInterface.itemClick(doctorList.get(position)); } }); holder.callnow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { anInterface.itemClickk(doctorList.get(position)); } }); } @Override public int getItemCount() { return doctorList.size(); } class ViewHolder extends RecyclerView.ViewHolder { public LinearLayout recyclerid; public TextView Doctorname; public TextView Qulifications; public TextView experince; public TextView bookappntment; public TextView callnow; public ViewHolder(View itemView) { super(itemView); Doctorname = (TextView) itemView.findViewById(R.id.personName) ; Qulifications = (TextView) itemView.findViewById(R.id.qulification) ; bookappntment=(TextView)itemView.findViewById(R.id.bookappntment); callnow=(TextView)itemView.findViewById(R.id.call); recyclerid=(LinearLayout)itemView.findViewById(R.id.recyclerid); /*experince = (TextView) itemView.findViewById(R.id.textView6) ; Specialization = (TextView) itemView.findViewById(R.id.textView8) ; Rating = (TextView) itemView.findViewById(R.id.textView8) ;*/ } } }
rowlistview.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/recyclerid" android:background="@color/transparent2" android:gravity="center_vertical" android:orientation="vertical"> <LinearLayout android:padding="4dp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:orientation="horizontal" android:weightSum="5"> <LinearLayout android:layout_width="45dp" android:layout_height="45dp" android:gravity="center" android:layout_gravity="center" android:orientation="horizontal"> <ImageView android:id="@+id/imgPerson" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/usericon" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical"> <TextView android:id="@+id/personName" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="@dimen/margin10" android:gravity="center_vertical" android:text="Person" android:textColor="@color/black" android:textSize="16dp" android:textStyle="normal" /> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="@dimen/margin10" android:gravity="center_vertical" android:text="MBBS" android:id="@+id/qulification" android:layout_marginTop="3dp" android:textColor="@color/black" android:textSize="14dp" /> <TextView android:id="@+id/userid" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="@dimen/margin10" android:gravity="center_vertical" android:text="6 Year Exp." android:visibility="gone" android:textColor="@color/black" android:textSize="14dp" android:textStyle="normal" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1.2" android:layout_marginTop="17dp" > <!-- <CheckBox android:id="@+id/cbSelectedItem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="@dimen/margin5" android:button="@drawable/check_box" android:focusable="false" android:visibility="visible" />--> <ImageView android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/margin10" android:gravity="center_horizontal" android:src="@drawable/ic_keyboard_arrow_right_black_24dp" /> </LinearLayout> </LinearLayout> <View android:layout_width="fill_parent" android:layout_height="@dimen/margin0.5" android:layout_marginLeft="@dimen/margin10" android:layout_marginRight="@dimen/margin10" android:background="@color/white2" android:visibility="gone" /> <LinearLayout android:layout_width="match_parent" android:layout_marginLeft="10dp" android:layout_height="wrap_content" android:weightSum="1"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Call now" android:paddingLeft="4dp" android:paddingRight="4dp" android:paddingTop="2dp" android:paddingBottom="2dp" android:layout_marginRight="23dp" android:textSize="14dp" android:textStyle="bold" android:background="@drawable/borderview" android:textColor="@color/heading_theme_light" android:id="@+id/call" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Book Appointment" android:textSize="14dp" android:paddingLeft="4dp" android:paddingRight="4dp" android:paddingTop="2dp" android:paddingBottom="2dp" android:background="@drawable/borderview" android:id="@+id/bookappntment" android:textColor="@color/heading_theme_light" android:textStyle="bold" /> </LinearLayout> <View android:layout_width="fill_parent" android:layout_height="4dp" /> </LinearLayout>
*)DoctorListActivity.java
public class DoctorListActivity extends Activity implements RecyclerViewItemClickInterface,callnowInterface { private static final String DoctorList_URL ="http://ada.tecboot.com/api/WebAPI/GetDoctor"; RecyclerView recyclerView; RecyclerView.LayoutManager recyclerViewlayoutManager; RecyclerView.Adapter recyclerViewadapter; List<DoctorList> doctorList; private LinearLayout llBack; Context context; Dialog dialog; TextView txtAddPeople; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_doctor_list); try { llBack = (LinearLayout) findViewById(R.id.llBack); llBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left); } }); txtAddPeople=(TextView)findViewById(R.id.txtAddPeople); txtAddPeople.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Collections.sort(doctorList, new Comparator<DoctorList>() { @Override public int compare(DoctorList lhs, DoctorList rhs) { // TODO Auto-generated method stub String f1 = lhs.getDoctorName(); String f2 = rhs.getDoctorName(); recyclerViewadapter.notifyDataSetChanged(); return f1.compareTo(f2); } }); } }); dialog = new Dialog (this); doctorListApiCall(); doctorList = new ArrayList<>(); recyclerView = (RecyclerView) findViewById(R.id.recyclerView1); recyclerView.setHasFixedSize(true); recyclerViewlayoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(recyclerViewlayoutManager); DividerItemDecoration divider = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL); divider.setDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.my_custom_divider)); recyclerView.addItemDecoration(divider); recyclerViewadapter = new DoctorListViewAdapter(doctorList, this); recyclerView.setAdapter(recyclerViewadapter); }catch (Exception e) { } } @Override public void itemClick(Object object) { Intent intent = new Intent(DoctorListActivity.this,BookAppoimnetActivity.class); startActivity(intent); } @Override public void itemClickk(Object object) { showDeleteDialog(); } private void showDeleteDialog() { final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setCancelable(true); dialog.setContentView(R.layout.calldialog); TextView text = (TextView) dialog.findViewById(R.id.txtMsg); Button okButton = (Button) dialog.findViewById(R.id.btnOk); Button cancleButton = (Button) dialog.findViewById(R.id.btnCancel); // final EditText edittext_tv = (EditText) dialog.findViewById(R.id.editText); okButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); cancleButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); } private void doctorListApiCall() { try { dialog.requestWindowFeature (Window.FEATURE_NO_TITLE); dialog.setContentView (R.layout.custom_progress_dialog_trans); dialog.getWindow ().setBackgroundDrawableResource (android.R.color.transparent); dialog.show (); StringRequest stringRequest = new StringRequest(Request.Method.POST, DoctorList_URL, new Response.Listener<String>() { @Override public void onResponse(String response) { getJsonResponse(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(DoctorListActivity.this, error.toString(), Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); params.put("DisplayType", "Grid"); return params; } }; RequestQueue requestQueue = Volley.newRequestQueue(this); requestQueue.add(stringRequest); } catch (Exception e) { e.printStackTrace(); } } private void getJsonResponse(String response) { try { dialog.dismiss(); JSONArray jsonArray = new JSONArray(response); for(int i = 0;i<jsonArray.length();i++) { DoctorList doctorList1 = new DoctorList(); String strDoctorName = jsonArray.getJSONObject(i).getString("DoctorName"); String strRating = jsonArray.getJSONObject(i).getString("Rating"); String strSpecialization = jsonArray.getJSONObject(i).getString("Specialization"); String strExperience = jsonArray.getJSONObject(i).getString("Experience"); String strQualification = jsonArray.getJSONObject(i).getString("Qualification"); doctorList1.setDoctorName(strDoctorName); doctorList1.setRating(strRating); doctorList1.setExperience(strExperience); doctorList1.setSpecialization(strSpecialization); doctorList1.setQualification(strQualification); doctorList.add(doctorList1); } } catch (JSONException e) { e.printStackTrace(); } recyclerViewadapter.notifyDataSetChanged(); } }
Interface:
1) public interface callnowInterface { public void itemClickk(Object object); } 2)
public interface RecyclerViewItemClickInterface { public void itemClick(Object object); }