MyTetra Share
Делитесь знаниями!
RVAdapter.java
22.04.2017
11:28
Раздел: Android - Разное - Пример использования CardView и RecyclerView в Android
RVAdapter.java

RVAdapter.java

package com.hathy.listsandcards; 
 
import android.support.v7.widget.CardView; 
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.TextView; 
 
import java.util.List; 
 
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> { 
//    Чтобы создать адаптер для RecyclerView, наследуемся от RecyclerView.Adapter. Этот адаптер представляет шаблон проектирования viewholder, подразумевающий использование пользовательского класса, который расширяет RecyclerView.ViewHolder. Эта паттерн сводит к минимуму количество обращений к дорогостоящему в плане ресурсов методу findViewById 
 
    public static class PersonViewHolder extends RecyclerView.ViewHolder { 
 
        CardView cv; 
        TextView personName; 
        TextView personAge; 
        ImageView personPhoto; 
 
        //Внутри конструктора нашего кастомного ViewHolder, инициализируем View, входящие в RecyclerView. 
        PersonViewHolder(View itemView) { 
            super(itemView); 
            cv = (CardView)itemView.findViewById(R.id.cv); 
            personName = (TextView)itemView.findViewById(R.id.person_name); 
            personAge = (TextView)itemView.findViewById(R.id.person_age); 
            personPhoto = (ImageView)itemView.findViewById(R.id.person_photo); 
        } 
    } 
 
    List<Person> persons; 
 
    // Далее, используем конструктор  адаптера RecyclerView. Так как наши данные в виде списка объектов Person 
    RVAdapter(List<Person> persons){ 
        this.persons = persons; 
    } 
 
    //RecyclerView.Adapter имеет три абстрактных метода, которые мы должны переопределить. Давайте начнем с метода getItemCount. Он вернет количество элементов, присутствующих в данных. Так как наши данные в виде списка, мы просто вызваем метод size к объекту списка: 
    @Override 
    public int getItemCount() { 
        return persons.size(); 
    } 
 
    //Далее, следует переопределить метод onCreateViewHolder. Как следует из названия, этот метод вызывается, когда кастомный ViewHolder должен быть инициализирован. Мы указываем макет для каждого элемента RecyclerView. Затем LayoutInflater заполняет макет, и передает его в конструктор ViewHolder. 
    @Override 
    public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false); 
        PersonViewHolder pvh = new PersonViewHolder(v); 
        return pvh; 
    } 
 
    //Переопределим onBindViewHolder и определим содержание каждого элемента из RecyclerView. Этот метод очень похож на метод getView  элемента адаптера ListView. В нашем примере, здесь вы должны установить значения полей имя, возраст, фото CardView. 
    @Override 
    public void onBindViewHolder(PersonViewHolder personViewHolder, int i) { 
        personViewHolder.personName.setText(persons.get(i).name); 
        personViewHolder.personAge.setText(persons.get(i).age); 
        personViewHolder.personPhoto.setImageResource(persons.get(i).photoId); 
    } 
 
    //Наконец, необходимо переопределить метод onAttachedToRecyclerView. В нашем случае мы просто используем суперкласс этого метода, как показано ниже. 
    @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
        super.onAttachedToRecyclerView(recyclerView); 
    } 
 
 
} 

 
MyTetra Share v.0.52
Яндекс индекс цитирования