Android RecyclerView Example

Android RecyclerView example using view hodelr in adapter

(For using multiple layout in RecyclerView check this tutorial )

Add ‘com.android.support:recyclerview‘ in Gradle dependencies and sync it

my app/build.gradle file

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.1"

    defaultConfig {
        applicationId "samples.bm.com.myapplication"
        minSdkVersion 14
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.2.0'

    compile 'com.android.support:recyclerview-v7:24.2.0'
}

MainActivity

package samples.bm.com.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements MyMediatorInterface {

    private MyAdapter mAdapter;
    private ArrayList<UserModel> usersList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        usersList = new ArrayList<>();

        usersList.add(new UserModel("Jos", "123546567"));
        usersList.add(new UserModel("Kiran", "456546456"));
        usersList.add(new UserModel("Manu", "5678"));
        usersList.add(new UserModel("Roy", "67443453"));
        usersList.add(new UserModel("Musthu", "456353"));
        usersList.add(new UserModel("Jaffer", "4644"));

        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv_my_recycler_view);
        recyclerView.setHasFixedSize(true);

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);

        mAdapter = new MyAdapter(usersList, this);
        recyclerView.setAdapter(mAdapter);

    }

    @Override
    public void userItemClick(int pos) {
        Toast.makeText(MainActivity.this, "Clicked User : " + usersList.get(pos).name, Toast.LENGTH_SHORT).show();
    }
}

Model

package samples.bm.com.myapplication;

public class UserModel {
    public String name;
    public String phone;

    public UserModel(String name, String phone) {
        this.name = name;
        this.phone = phone;
    }
}

Adapter

package samples.bm.com.myapplication;

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.LinearLayout;
import android.widget.TextView;
import java.lang.ref.WeakReference;
import java.util.ArrayList;


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    ArrayList<UserModel> mUsersList;
    WeakReference<Context> mContextWeakReference;

    public MyAdapter(ArrayList<UserModel> usersList, Context context) {
        mUsersList = usersList;
        this.mContextWeakReference = new WeakReference<Context>(context);
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        Context context = mContextWeakReference.get();

        if (context != null) {

            View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_user_item, parent, false);

            return new MyViewHolder(itemView, context);
        }

        return null;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {

        Context context = mContextWeakReference.get();

        if (context == null) {
            return;
        }

        UserModel currentUser = mUsersList.get(position);

        holder.TvName.setText(currentUser.name);
        holder.TvPhone.setText(currentUser.phone);

    }

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

    //holder
    public static class MyViewHolder extends RecyclerView.ViewHolder {

        public TextView TvName, TvPhone;
        public LinearLayout ll;

        public MyViewHolder(View itemView, final Context context) {

            super(itemView);
            TvName = (TextView) itemView.findViewById(R.id.tv_name);
            TvPhone = (TextView) itemView.findViewById(R.id.tv_phone);
            ll = (LinearLayout) itemView.findViewById(R.id.ll_layout);

            ll.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {
                    ((MainActivity) context).userItemClick(getAdapterPosition());
                }
            });
        }
    }
}

Interface:

package samples.bm.com.myapplication;

public interface MyMediatorInterface {
    void userItemClick(int pos);
}

Layouts

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="samples.bm.com.myapplication.MainActivity"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_my_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

Recycler View row

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/ll_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="20px">

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tv_phone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="right" />
</LinearLayout>

Out Put

recyclerview

 

If you want to add data to RecyclerView  add data into the Array List (eg:- usersList.add(new UserModel(“new name”, “345”)); and you can call the adapter function notifyItemInserted() or notifyDatasetChanged().

mAdapter.notifyItemInserted(position);
mAdapter.notifyDataSetChanged(); //this function you can call with any activity (inset,update,delete) but it is expensive

While editing edit the value in array list and call notifyItemChanged(position), while deleting delete the position from array list and call notifyItemRemoved(position)

 

Author: bm on August 30, 2016
Category: Android
Tags: , ,

One thought on “Android RecyclerView Example

  1. Hey… Thanks for your post.
    it helped me alot.. i got stuck till 2 days and not get any way of getting value from recyclerview to edittext. but by using your method i solved my problem.
    Thanks alot.

Your comment:

Your Name

Comment:




Last articles