What is RecyclerView in android?
RecyclerView is more advance version of ListView. When you want to change your dataset at run time, RecylerView is very much useful to use.
Here I am going to give an example of RecyclerView with Custom Adapter.
Step1:
First Create a project using Android-Studio, with name "RecylerViewSample" with package name "recyle.sample"
Keep your activity name: MainActivity.java and layout name activity_main.xml
Step2:
Inside activity_main.xml add recylerview. Full code bellow:
Inside activity_main.xml add recylerview. Full code bellow:
activity_main.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="match_parent" > <android.support.v7.widget.Rec yclerView
android:id="@+id/rv_fruit_list"
android:layout_width="match_parent"
android:layout_height="match_parent" android:scrollbars="none"/> </LinearLayout>
Here I am giving recyler id name rv_fruit_list.
Step3:
Now create model class name Fruit.java. Here I am addinfg three variables fruitName, fruitDetails and fruitPrice. Also creating constructor and getter-setter method. I am creating this model class because of custom adapter. This model class will contain fruit data and it will show in recyler-view. Full Code is bellow:
Fruit.java:
package recyle.sample; public class Fruit { private String fruitName; private String fruitDetails; private String fruitPrice; public Fruit(String fruitName, String fruitDetails, String fruitPrice) { this.fruitName = fruitName; this.fruitDetails = fruitDetails; this.fruitPrice = fruitPrice; } public String getFruitName() { return fruitName; } public void setFruitName(String fruitName) { this.fruitName = fruitName; } public String getFruitDetails() { return fruitDetails; } public void setFruitDetails(String fruitDetails) { this.fruitDetails = fruitDetails; } public String getFruitPrice() { return fruitPrice; } public void setFruitPrice(String fruitPrice) { this.fruitPrice = fruitPrice; } }
Step4:
Add recyler view inside build.gradle file:
compile 'com.android.support:recyclerv iew-v7:25.0.1'
Create a xml file name fruit_recyle_adapter.xml , which will be used inside adapter file. Code bellow:
fruit_recyle_adapter.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:layout_gravity="center"
android:orientation="vertical"> <TextView
android:id="@+id/txt_fruit_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:gravity="left"
android:maxLines="2"
android:padding="6sp"
android:text="Name"
android:textColor="#000000" /> <TextView
android:id="@+id/txt_fruit_details"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:gravity="left"
android:maxLines="2"
android:padding="6sp"
android:text="Details"
android:textColor="#000000" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:padding="6sp"
android:text="@string/rs"
android:textColor="@color/colorAccent"/> <TextView
android:id="@+id/tv_fruit_price"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:padding="6sp"
android:text="3000"
android:textColor="@color/colorAccent"
android:textSize="16sp" /> </LinearLayout> </LinearLayout>
Here @string/rs value is <string name="rs">\u20B9</string> .
Now create one more class FruitRecylerAdapter.java . Inside this class create Holder class name FruitHolder, codes bellow:
public class FruitHolder extends RecyclerView.ViewHolder{ public TextView fruitName,fruitDetails,fruitPrice; public FruitHolder(View itemView) { super(itemView); fruitName = (TextView)itemView.findViewByI d(R.id.txt_fruit_name); fruitDetails = (TextView)itemView.findViewByI d(R.id.txt_fruit_details); fruitPrice = (TextView)itemView.findViewByI d(R.id.tv_fruit_price); } }
Full Code For FruitRecylerAdapter.java bellow:
package recyle.sample; import android.content.Context; 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.List; public class FruitRecylerAdapter extends RecyclerView.Adapter<FruitRecy lerAdapter.FruitHolder>{ List<Fruit> listFruit; Context mContext; public FruitRecylerAdapter(Context con,List<Fruit> fList){ mContext = con; listFruit = fList; } @Override public FruitHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.get Context()).
inflate(R.layout.fruit_recyle_adapter, parent, false); return new FruitHolder(itemView); } @Override public void onBindViewHolder(FruitHolder holder, int position) { Fruit f = listFruit.get(position); holder.fruitName.setText(f.get FruitName()); holder.fruitDetails.setText(f. getFruitDetails()); holder.fruitPrice.setText(f.ge tFruitPrice()); } @Override public int getItemCount() { return listFruit.size(); } public class FruitHolder extends RecyclerView.ViewHolder{ public TextView fruitName,fruitDetails,fruitPr ice; public FruitHolder(View itemView) { super(itemView); fruitName = (TextView)itemView.findViewByI d(R.id.txt_fruit_name); fruitDetails = (TextView)itemView.findViewByI d(R.id.txt_fruit_details); fruitPrice = (TextView)itemView.findViewByI d(R.id.tv_fruit_price); } } }
Step5:
Now we will go to MainActivity.java
Now we will go to MainActivity.java
Firstly we need to add static data inside list which will show inside recyle-view. Now we will create a method, name setStaticDataForFruit() which will hold static data.
private void setStaticDataForFruit(){ Fruit f1 = new Fruit("Apple","Vitamin A,B1,B2,B6,C,Folate (folic acid)","300"); Fruit f2 = new Fruit("Banana","Vitamin A,B1,B2,B6","10"); Fruit f3 = new Fruit("Orange","Vitamin A,B1,B2,B6,Folate (folic acid)","10"); listFruit.add(f1); listFruit.add(f2); listFruit.add(f3); }
After creating static method, now we need to set adapter. Code Bellow:
private void setRecyleAdapter() { LinearLayoutManager layoutManager = new LinearLayoutManager(getApplicationContext(),
LinearLayoutManager.VERTICAL, false); rvFruitList.setLayoutManager(layoutManager); fruitAdapter = new FruitRecylerAdapter( MainActivity.this, listFruit); rvFruitList.setAdapter(fruitAd apter); //Updating recyler Adapter fruitAdapter. notifyDataSetChanged();
Now Full Code Bellow:
MainActivity.java
package recyle.sample; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget. LinearLayoutManager; import android.support.v7.widget. RecyclerView; import java.util.ArrayList; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; public class MainActivity extends AppCompatActivity { @Bind(R.id.rv_fruit_list) RecyclerView rvFruitList; FruitRecylerAdapter fruitAdapter; List<Fruit> listFruit = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState); setContentView(R.layout.activi ty_main); ButterKnife.bind(this); //Setting static Data
setStaticDataForFruit(); //System.out.println("List::"+listFruit); //Setting Adapter
setRecyleAdapter(); }
private void setRecyleAdapter() { LinearLayoutManager layoutManager = new LinearLayoutManager(
getApplicationContext(), LinearLayoutManager.VERTICAL, false);
rvFruitList.setLayoutManager(layoutManager); fruitAdapter = new FruitRecylerAdapter( MainActivity.this, listFruit); rvFruitList.setAdapter(fruitAd apter); //Updating recyler Adapter
fruitAdapter.notifyDataSetChanged(); } private void setStaticDataForFruit(){ Fruit f1 = new Fruit("Apple","Vitamin A,B1,B2,B6,C,Folate (folic acid)","300"); Fruit f2 = new Fruit("Banana","Vitamin A,B1,B2,B6","10"); Fruit f3 = new Fruit("Orange","Vitamin A,B1,B2,B6,Folate (folic acid)","10"); listFruit.add(f1); listFruit.add(f2); listFruit.add(f3); } }
Also providing you build.gradle file:
apply plugin: 'com.android.application' android { compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig { applicationId "recyle.sample"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso: espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support: appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout: 1.0.2'
testCompile 'junit:junit:4.12' compile 'com.android.support:recyclerview-v7:25.0.1'
compile 'com.jakewharton:butterknife:7.0.1' }
Screen-Shots: