• This is a major issue in the apps’ performance when considering apps with feeds or
data listing
• To fix this issue, Recyclerview are used generally.
• This will use only a certain number of views and recycle it for displaying huge amount of feeds or listing data
• Recyclerview provides Layout managers to display data. There are three types of layout managers
- LinearLayoutManager
- GridLayoutManager
- StaggeredGridLayoutManager
dependencies { compile 'com.android.support:recyclerview-v7:23.4.0' }3. Add a Recycler View in your xml layout as below
<android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView>4.Set Layout manager to Recyclerview like below
recyclerView=(RecyclerView)findViewById(R.id.recyclerview); recyclerView.setLayoutManager(new LinearLayoutManager(this));5.Before adding data adapter to Recyclerview create getter and setter to data items. Create java class DataModel.java and declare the name and department
DataModel.java package com.example.myapplication; public class DataModel { String name; String Department; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDepartment() { return Department; } public void setDepartment(String department) { Department = department; } }6. Create a layout like row_item.Xml with the below code
<?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="match_parent" android:padding="16dp" android:orientation="vertical"> <TextView android:id="@+id/name" android:text="name" android:textStyle="bold" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="department"/> </LinearLayout>7.Create Recycler adapter class DataAdapter.java like below
package com.example.myapplication; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; public class DataAdapter extends RecyclerView.Adapter { ArrayListmdatalist; public DataAdapter(ArrayList datalist) { this.mdatalist=datalist; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item, null); ViewHolder viewHolder = new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { DataModel dataModel=mdatalist.get(position); holder.name.setText(dataModel.getName()); holder.department.setText(dataModel.getDepartment()); } @Override public int getItemCount() { return mdatalist.size(); } public class ViewHolder extends RecyclerView.ViewHolder { public TextView name, department; public ViewHolder(View view) { super(view); name = (TextView) view.findViewById(R.id.name); department = (TextView) view.findViewById(R.id.department); } } }8.Set data to adaptor like the below activity
public class MainActivity extends AppCompatActivity { RecyclerView recyclerView; DataModel datamodel; ArrayList datalist=new ArrayList<>(); DataAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activitymain); recyclerView=(RecyclerView)findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.addItemDecoration(new DividerItemDecoration(this)); adapter=new DataAdapter(datalist); recyclerView.setAdapter(adapter); data(); } private void data() { datamodel = new DataModel("Nilanchala Panigrahy","MEDICAL"); datalist.add(datamodel); datamodel = new DataModel("Panigrahy Kendry","IT"); datalist.add(datamodel); datamodel = new DataModel("Haasan Panigrahy","WAMDS"); datalist.add(datamodel); datamodel = new DataModel("Neshany","IT"); datalist.add(datamodel); datamodel = new DataModel("Helen atmir","WAMDS"); datalist.add(datamodel); datamodel = new DataModel("Rabhu Ademoh","IT"); datalist.add(datamodel); datamodel = new DataModel("Kunal Chawla","MEDICAL"); datalist.add(datamodel); datamodel = new DataModel("Ankit pandey","FINANCE"); datalist.add(datamodel); datamodel = new DataModel("Akinyemi john","IT"); datalist.add(datamodel); datamodel = new DataModel("Denis Shahov","WAMDS"); datalist.add(datamodel); adapter.notifyDataSetChanged(); } }9. Adding divider to recycler view is done like below
public class DividerItemDecoration extends RecyclerView.ItemDecoration { private Drawable mDivider; public DividerItemDecoration(Context context) { mDivider = context.getResources().getDrawable(R.drawable.line_divider); } @Override public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { int left = parent.getPaddingLeft(); int right = parent.getWidth() - parent.getPaddingRight(); int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { View child = parent.getChildAt(i); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); int top = child.getBottom() + params.bottomMargin; int bottom = top + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } }10. Run the program and get an output like below
