RecyclerView In Android With Custom Adapter

RecyclerView Screen

In this tutorial we are going to create an application which shows list of books along with its price , rating and reviews count. We are going to use recycler view for creating the list. So lets get started with the tutorial. Hope you would like this tutorial.

Step 1: Create Project

First we need to create a new project. So launch your android studio and create a new project with whatever name you like. I have named it RecycleViewDemo you can name anything you like.

Create new project.
Configure your project.

Step 2: Add dependencies in your project.

Once the project is created you need to add the dependency for using recyclerview in your project. Add this dependency in your gradel (Module: app)

implementation ‘com.android.support:recyclerview-v7:28.0.0’

Add dependency

Step 3: Create Layouts

After adding the dependency we can start designing the layouts of our app. First we will create the main layout of the app inside the activity_main.xml file.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".MainActivity">

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

</RelativeLayout>

Once we have created the main layout we need to create the row for our recycler view. For that we will create my_list_row.xml file. So create a new layout resource file inside the layout folder and name it as my_list_row .

my_list_row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="wrap_content">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="3dp"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:weightSum="2"
            android:orientation="horizontal"
            android:id="@+id/mainLinear"
            >
            <RelativeLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.6"
                >
                <ImageView
                    android:id="@+id/ivBook"
                    android:layout_width="match_parent"
                    android:layout_height="125dp"
                    android:layout_marginLeft="6dp"
                    android:layout_marginRight="6dp"
                    android:src="@drawable/book1" />
            </RelativeLayout>
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1.4"
                android:layout_marginTop="14dp"
                android:layout_marginLeft="8dp"
                android:layout_marginRight="8dp"
                android:orientation="vertical"
                >
                <TextView
                    android:id="@+id/tvBookName"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:maxLines="1"
                    android:text="Android Development"
                    android:textColor="@color/black"
                    android:textSize="18dp" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="The Busy Coder's Guid"
                    android:id="@+id/tvBookSubtitle"
                    android:textSize="12sp"
                    />
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:weightSum="2"
                    android:orientation="horizontal">
                    <RatingBar
                        android:id="@+id/bookRateBar"
                        style="?android:attr/ratingBarStyleSmall"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="5dp"
                        android:rating="3" />
                    <TextView
                        android:id="@+id/tvPrice"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:gravity="end"
                        android:text="₹ 2000"
                        android:textAlignment="textEnd"
                        android:textColor="@color/black"
                        android:textSize="16sp" />
                </LinearLayout>
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:weightSum="2"
                    android:orientation="horizontal"
                    >
                    <RelativeLayout
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        >
                        <TextView
                            android:id="@+id/tvReviews"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_centerVertical="true"
                            android:layout_marginLeft="3dp"
                            android:layout_marginStart="3dp"
                            android:text="200 reviews"
                            android:textSize="12sp" />
                    </RelativeLayout>
                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@color/lightgrey"
            android:layout_below="@+id/mainLinear"
            />
    </RelativeLayout>
</RelativeLayout>

colors.xml

Add this code to your colors.xml file inside the values folder.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>
    <color name="black">#000000</color>
    <color name="grey">#808080</color>
    <color name="lightgrey">#D3D3D3</color>
    <color name="white">#ffffff</color>
    <color name="orange">#f7ae01</color>
    <color name="btnColor">#338afe</color>
    <color name="yellow">#faf3a2</color>
    <color name="starColor">#FDB901</color>
    <color name="blur">#80FFFFFF</color>
    <color name="bg">#666666</color>
</resources>
My list row screen

With this we have completed with the designing of the layouts for our application. Now lets start with the main coding of the application.

Step 4: Creating the model class

Now lets create the model class . So model class is a class which store data like book name, book price etc. It is a class which stores our data and business logic. In model class there are mainly three methods.

  • Constructor: Which acts as a bridge between the model class and adapter class.
  • Getter Method : It is used for accessing the value of any property. Example: getBookName() for getting a particular book name.
  • Setter Methods: It is used for setting value of any property.

So lets create a model class named MyListModel inside the same package where our MainActivity is present. Below is the code for our model class.

package in.androidtuts.recycleviewdemo;

public class MyListModel {
    private String bookName,bookSubTitle;
    private int imagePath,bookPrice,bookReviews;
    private float bookRating;
    public MyListModel(String bookName, String bookSubTitle, int imagePath, int bookPrice, int bookReviews, float bookRating) {
        this.bookName = bookName;
        this.bookSubTitle = bookSubTitle;
        this.imagePath = imagePath;
        this.bookPrice = bookPrice;
        this.bookReviews = bookReviews;
        this.bookRating = bookRating;
    }
    public String getBookName() {
        return bookName;
    }
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    public String getBookSubTitle() {
        return bookSubTitle;
    }
    public void setBookSubTitle(String bookSubTitle) {
        this.bookSubTitle = bookSubTitle;
    }
    public int getImagePath() {
        return imagePath;
    }
    public void setImagePath(int imagePath) {
        this.imagePath = imagePath;
    }
    public int getBookPrice() {
        return bookPrice;
    }
    public void setBookPrice(int bookPrice) {
        this.bookPrice = bookPrice;
    }
    public int getBookReviews() {
        return bookReviews;
    }
    public void setBookReviews(int bookReviews) {
        this.bookReviews = bookReviews;
    }
    public float getBookRating() {
        return bookRating;
    }
    public void setBookRating(float bookRating) {
        this.bookRating = bookRating;
    }
}

Step 5: Creating the adapter class

An adapter is responsible for retrieving data from the data set and for generating view objects based on that data. The generated View objects are then used to populate any adapter view that is bound to the adapter. In our example we will use recycle view adapter to populate data in our view. Below are the main methods of our adapter class.

  1. MyListViewHolder() : In this method we define our view which are present in my_list_row layout and get those view by their id’s.
  2. Create a constructor of the class : Constructor is the mediator between Adapter and Activity.
  3. onCreateViewHolder()  : This method create view for our application by inflating the layout.
  4. onBindViewHolder() : This method bind data with the layout items.
  5. getItemCount() : This method indicates how many items (or rows) are in the data set that will be presented in the Adapter View.

Now let’s create the adapter class named MyListAdapter inside the same package where our MainActivity is present. Below is the code for our adapter class.

package in.androidtuts.recycleviewdemo;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;
import java.util.List;
public class MyListAdapter extends RecyclerView.Adapter<MyListAdapter.MyListViewHolder> {
    List<MyListModel> myListModels;
    @NonNull
    @Override
    public MyListViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.my_list_row,viewGroup,false);
        return new MyListViewHolder(itemView);
    }
    @Override
    public void onBindViewHolder(@NonNull MyListViewHolder holder, int position) {
        MyListModel myListModel = myListModels.get(position);
        holder.tvBookName.setText(myListModel.getBookName());
        holder.tvBookSubtitle.setText(myListModel.getBookSubTitle());
        holder.tvPrice.setText("₹ "+String.valueOf(myListModel.getBookPrice()));
        holder.tvReviews.setText(String.valueOf(myListModel.getBookReviews())+" Reviews");
        holder.bookRateBar.setRating(myListModel.getBookRating());
        holder.ivBook.setImageResource(myListModel.getImagePath());
    }
    @Override
    public int getItemCount() {
        return myListModels.size();
    }
    public  class MyListViewHolder extends RecyclerView.ViewHolder
    {
        TextView tvBookName,tvBookSubtitle,tvPrice,tvReviews;
        RatingBar bookRateBar;
        ImageView ivBook;
        public MyListViewHolder(@NonNull View itemView) {
            super(itemView);
            tvBookName = itemView.findViewById(R.id.tvBookName);
            tvBookSubtitle = itemView.findViewById(R.id.tvBookSubtitle);
            tvPrice = itemView.findViewById(R.id.tvPrice);
            tvReviews = itemView.findViewById(R.id.tvReviews);
            bookRateBar = itemView.findViewById(R.id.bookRateBar);
            ivBook = itemView.findViewById(R.id.ivBook);
        }
    }
    public MyListAdapter(List<MyListModel> myListModels) {
        this.myListModels = myListModels;
    }
}

Step 6: Working with MainActivity and creating the data set.

This is the final step for creating the recycler view in this step we will work on the main activity class and create dummy data set for our recycler view. So lets start working on it. Below is the code for main activity which contains the data set.

package in.androidtuts.recycleviewdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    RecyclerView recycleList;
    MyListAdapter myListAdapter;
    List<MyListModel> myListModels = new ArrayList<>();

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

        recycleList = findViewById(R.id.recycleList);
        myListAdapter = new MyListAdapter(myListModels);
        recycleList.setHasFixedSize(true);
        LinearLayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
        recycleList.setLayoutManager(layoutManager);
        recycleList.setAdapter(myListAdapter);

        loadDataSet();

    }

    public void loadDataSet()
    {
        MyListModel data = new MyListModel("Android Development","The Busy Coder's Guide",R.drawable.book1,1500,300,4);
        myListModels.add(data);

        data = new MyListModel("Android App Dev","for dummies",R.drawable.book2,1000,300,3);
        myListModels.add(data);

        data = new MyListModel("Android Studio 3.0","Development Essential",R.drawable.book3,2500,700,4);
        myListModels.add(data);

        data = new MyListModel("Beginning Android","Mark L. Murphy",R.drawable.book4,3000,800,5);
        myListModels.add(data);

        data = new MyListModel("Android Programming","Pushing the limits",R.drawable.book5,500,100,1);
        myListModels.add(data);

        data = new MyListModel("Android App Dev","O'REILLY",R.drawable.book6,800,300,2);
        myListModels.add(data);

        data = new MyListModel("Processing for Android","Andres Coluberi",R.drawable.book7,1500,400,3);
        myListModels.add(data);

        data = new MyListModel("Learn Android Studio 3","with Kotlin",R.drawable.book8,1700,1300,6);
        myListModels.add(data);

        data = new MyListModel("Hello Android","Ed Burnette",R.drawable.book9,1800,250,4);
        myListModels.add(data);

        data = new MyListModel("Pro Android Apps","Performance Optimization",R.drawable.book10,3500,100,3);
        myListModels.add(data);

        myListAdapter.notifyDataSetChanged();
    }
}

You can build your app and run on emulator now. Congratulations you have successfully created the recycler view which displays list of the books. Thanks for going through the entire tutorial. Let me know if there are any doubts in the comment section below i would be glad to solve them. See you in the next tutorial till then Sayonara!

0 thoughts on “RecyclerView In Android With Custom Adapter”

  1. 1хбет – букмекерская контора, какая сегодня пользуется популярностью. Оформлена она на Кюрасао и действует еще с 1997 года, в онлайн возникла с 2011 года. Количество оформленных клиентов находится в постоянном росте. Главное достоинство заведения – превосходные процентные ставки, которые превосходят предложения других учреждений. Теперь в распоряжении компании около 1000 пунктов по приему ставок, главный ресурс на 36 языках мира и использование новых решений для комфортности собственных геймеров. 1xbet официальный сайт Веб-сайт букмекерской конторы с удобным интерфейсом, который освоит в том числе и новенький. Оформлен он в сине-белоснежном оттенке. Сразу же на основной страничке можно найти панельку с табличками, в них легко разобраться. Если играющего заинтересовал конкретный вид спортивных занятий, нужно обратить внимание на перечень в левой части сайта, где по алфавиту указываются все виды спортивных состязаний. По центру можно рассмотреть проходящие акции и особые условия. На сайте сможете познакомиться с прогнозом ставок на спорт, расценить мнение специалистов. Справа привычное окошко регистрации на вебсайте и прохода в аккаунт. Но насколько бы безукоризненным не был портал, на этот адрес поставлена блокировка. Чтобы ее обойти применяется зеркало.  1xbet зеркало на сегодня Рабочее зеркало – воспроизводит главный портал с полным его перечнем возможностей. Просто изменяется доменное имя, где интернет-сайт не подлежит блокировке. Такой сайт доступен непрерывно и даже при проведении технических работ и возможных атак. Актуален он для абонентов из России, где ставки на спорт в варианте online под запретом, а подобные сайты просто отключаются. Но создатели уже задумали, каким образом обходить запрет. 1xbet зеркало рабочее на сегодня позволяет фирме выполнять свои услуги, пускай и не совсем на основании закона. Просто-напросто для того, чтобы иметь разрешение на прием ставок на спортивные мероприятия в РФ, следует внести не менее 30 млн рублей. Пусть даже если оформить лицензию, то это вызовет большие расходы, какие повлияют на снижение коэффициентов. Отдельные посетители станут интересоваться соперничающими фирмами и просто перестанут ставить на этом ресурсе. Поэтому более выгодное решение для фирмы и непосредственно участвующих – это применение зеркального сайта.  Чтобы зайти в личный аккаунт нужно ввести логин и пароль. Информация секретная и защищена от посторонних, по этой причине бояться за сохранность сведений не стоит. Перед игроком раскрывается знакомый список возможностей и возможности учетной записи – обороты по счету, данные игровых ставок, средства на счету, возможность их вывода. В прочих же странах использование предложений БК не запрещается, правда имеет возможность немножко видоизменяться само название веб-сайта. В связи с этим стоит установить поисковый запрос: зеркало 1xbet рабочее на сегодня прямо сейчас и всякому пользователю будет представлен список действующих ссылок. Обычно контора сама рассылает гиперссылки зарегистрированным играющим просто-напросто на сотовое устройство, почтовый ящик, используя службы саппорта. Разумеется, каждый абонент сможет наведать главный интернет-сайт букмекерской канторы, применяя VPN. Сегодня представлено множество программ, которые дают возможность менять IP-адрес. 1хбет букмекерской конторы Больше тысячи событий в сутки предоставляется порталом. Любой игрок может сделать выбор из классических спортивных мероприятий – футбол, волейбол, и редких – флорбол, крикет. На первой же странице собраны наиболее главные события в мире спорта – Чемпионат мира по футболу или Стран Европы. Всякий может попробовать себя в игровых ставках в online-режиме, а также прогнозировать лауреатов популярных премий. Именно благодаря комплексу Multi-LIVE доступно проведение игровых ставок непосредственно на несколько игорных событий. При этом каждое спорт событие передается на сайте. Открыв раздел «Финставки» и «Биржа криптовалют», сможете попробовать свою удачу и иметь заработок на денежных скачках. Новеньких геймеров привлекает высокий коэффициент и небольшая маржа. Лото, ТВ-шоу, ставки на погодные условия, сериалы – большой выбор мероприятий порадует каждого зарегистрированного игрока БК. Стоит наведать 1xbet официальный сайт, который сильно поразит своим функционалом. Пользоваться услугами БК смогут только оформленные играющие. Онлайн-сервис 1xZone реализует не только графическую трансляцию, но и игровые ставки на мероприятия, происходящие во время последующего боя.   Операция регистрации на ресурсе займет короткий промежуток времени. А для удобства клиентов на 1xbet регистрация проходит одним из способов: Укажите свой номер телефона и сделайте привязку к нему. Воспользуйтесь иконкой любой из социальных сетей, где вы уже зарегистрированы. Напишите электронный адрес. Очень распространенный и простой метод последний, для него потребуется верификация аккаунта через почтовый ящик и переход по ссылке. Выбирайте сложный пароль с цифрами и буквами, для того, чтобы его было трудно вскрыть. Воспользоваться службами конторы смогут лица, которым 18 лет. Чтобы получить выигранные денежные средства со счета, предстоит внимательно заполнить профиль и записать личные данные. Однако беспокоиться нет смысла, контора обеспечивает их безопасность. Промокоды 1xbet Игроков букмекерской конторы привлекает изобилие акций и призов для новеньких и постоянных игроков. Хорошие подарки подготовлены имениннику –  промокод 1xbet либо повышение коэффициента на некоторые игрушки. Процедура регистрации с промокодом позволяет умножить сумму денег, вложенную на счет. Для этой цели начинающий пользователь выполняет аутентификацию, зачисляет на свой счет 100 рублей и получает до 6500 рублей. Однако получить их невозможно, пока не отыграешь. Приветственный приз предоставляется при первоначальном внесении депозитных средств. Сумма должна быть в районе 100 евро в этом случае получите одинаковый эквивалент. Только отыгранные средства ставят на получение. Для тех граждан, кто регулярно в проигрыше, можно выиграть карты. Все это создано чтобы участники не теряли заинтересованность к ходу игры и совершенствовали свое мастерство.   Для пополнения счета игрока применяются распространенные системы оплаты. Цифровые кошельки Qiwi, WebMoney, а также обычные карточки MasterCard, VISA. Доступно дополнение через салоны связи, сообщение и банковский перевод. Валюта игрового счета может быть различной – в евро, рублях, долларах. При этом вывод проходит на привязанный к аккаунту кошелек, что гарантирует защищенность и надежность денежных средств. Минимальная сумма получения составляет 3 доллара или 2 евро. Только лишь после проверки личности можно зайти в кабинет и создать заказ на получение. Если нет абсолютно никаких проблем, то она происходит моментально, в первый раз может пройти до 3 дней. Скачать 1xbet на андроид Стоит скачать 1xbet на андроид и айфон, ведь программа раскрывает перед абонентами много потенциалов. С ним вы непрерывно будете знать о последних событиях и сможете проверять собственные ставки на спортивные состязания. Закачивается приложение для Android и IOS, что позволяет инсталлировать его на все прогрессивные гаджеты – телефоны, планшеты. Программа раскрывает доступ к аккаунту и остальным возможностям вебсайта. Только одно, что будет оставаться недоступным – функциональность «1хZone» и прямая передача. Создатели уже работают над устранением этих моментов. Для тех, кто регулярно путешествует не желает открываться от мира игровых ставок, такое приложение будет подлинным спасением. Web-сайт приспосабливается под дисплей применяемого устройства. Игровые ставки производятся попросту в софте. В случае, если у вас появились трудности при выводе средств либо ваша ставка долго не подсчитывается, не стоит переживать, лучше всего сразу же направиться за помощью в службу поддержки. Работники службы поддержки доступны пользователям в течении 24 часов в сутки и готовы дать ответ на все интересующие моменты. Максимальное время обрабатывания обращения – сутки, но откликнуться стремятся раньше. Любой играющий может самостоятельно выбрать подходящий способ связи: – через online; – по указанным на ресурсе контактным сведениям. Другой связью можно считать послание электронного письма либо написание онлайн-формы «Консультант-онлайн». В режиме чата любой пользователь получает ответ на вопрос. Абсолютно все спорные моменты находят решение, сотрудники стремятся определиться в каждой обстановке, найти индивидуальный подход. Подобная публичность БК располагает к себе и число клиентов только лишь увеличивается.

Leave a Reply

Your email address will not be published. Required fields are marked *