Android RecyclerView Kullanımı ve Örnek Uygulama

Selamlar,

Android uygulamalarında listeleme işlemleri için kullanılan recyclerview viewını basit şekilde kullanacağız. Listeviewe benzeyen bu view daha kullanışlı ve özelleştirilebilir yapıda. Hem yatay hem dikey scroll edilebilir, içerisindeki nesnelerin yerleşimi için layoutmanager sınıfını kullanmamız gerekiyor. Ben genelde LinearLayoutManager ve GridLayoutManager sınıflarını kullanıyorum.

RecyclerView  için her item in bir layoutu olmak zorunda ve bu nesneyi bir adapter sayesinde veri setine bağlamalıyız. Basit bit örnek yapalım,  futbol takımlarımızı ve kısaca bazı bilgilerini listeleyelim.

Her item için bir tane layout olmalıdır, bizim layoutumuz: row_takim.xml

    
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:background="#ffffff">

  <TextView
        android:id="@+id/tv_takim_adi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="17sp"
        android:textStyle="bold"/>

 <TextView
        android:id="@+id/tv_kurulus_yili"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_takim_adi"
        android:layout_marginTop="5dp"
        android:textSize="17sp"
        android:textStyle="normal"/>

    <TextView
        android:id="@+id/tv_kupa_sayisi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/tv_takim_adi"
        android:layout_marginTop="5dp"
        android:textSize="17sp"
        android:textStyle="normal"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_below="@+id/tv_kurulus_yili"
        android:layout_marginTop="5dp"
        android:background="#ddd"/>
</RelativeLayout>   

Verilerimiz belirli bir modele göre olacaktır. Model sınıfımızı tanımlayalım. : ModelTakim.java

public class ModelTakim {

    private int id;
    private String takimAdi;
    private String kurulusTarihi;
    private String kupaSayisi;

    public ModelTakim() {
    }

    public ModelTakim(int id, String takimAdi, String kurulusTarihi, String kupaSayisi) {
        this.id = id;
        this.takimAdi = takimAdi;
        this.kurulusTarihi = kurulusTarihi;
        this.kupaSayisi = kupaSayisi;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTakimAdi() {
        return takimAdi;
    }

    public void setTakimAdi(String takimAdi) {
        this.takimAdi = takimAdi;
    }

    public String getKurulusTarihi() {
        return kurulusTarihi;
    }

    public void setKurulusTarihi(String kurulusTarihi) {
        this.kurulusTarihi = kurulusTarihi;
    }

    public String getKupaSayisi() {
        return kupaSayisi;
    }

    public void setKupaSayisi(String kupaSayisi) {
        this.kupaSayisi = kupaSayisi;
    }
}

Verilerimizle RecyclerView nesnesini bağlamak için bir tane adaptera ihtiyacımız var. Adaptrımız: TakimlarAdapter.java

public class TakimlarAdapter extends RecyclerView.Adapter <TakimlarAdapter.ViewHolder>{

    private Context context;
    private List<ModelTakim> listTakim;
    private LayoutInflater inflater;

    //item click için interface kullanıyoruz
    private RecyclerViewItemClickListener recyclerViewItemClickListener;

    public class ViewHolder extends RecyclerView.ViewHolder {
        public TextView tv_takim_adi, tv_kurulus_yili,tv_kupa_sayisi;

        public int position = 0;

        public ViewHolder(View v) {
            super(v);
            //item click için tek tokunuş
            v.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    recyclerViewItemClickListener.onItemClick(v, position);
                }
            });
            //item click için uzun dokunuş
            v.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {

                    recyclerViewItemClickListener.onItemLongClick(v, position);
                    return true;
                }
            });

            //row layoutumuzdaki viewları cast ediyoruz
            tv_takim_adi = (TextView) v.findViewById(R.id.tv_takim_adi);
            tv_kurulus_yili = (TextView) v.findViewById(R.id.tv_kurulus_yili);
            tv_kupa_sayisi = (TextView) v.findViewById(R.id.tv_kupa_sayisi);
        }
    }

    //item click e dokunma özelliği için kullandığımız metot
    public void setOnItemClickListener(RecyclerViewItemClickListener recyclerViewItemClickListener) {
        this.recyclerViewItemClickListener = recyclerViewItemClickListener;
    }


    //yapıcımız
    public TakimlarAdapter(Context context, List list) {
        this.context = context;
        this.listTakim = list;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View v = inflater.inflate(R.layout.row_takim, parent, false);

        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.position = position;
        holder.tv_takim_adi.setText(listTakim.get(position).getTakimAdi());
        holder.tv_kupa_sayisi.setText(listTakim.get(position).getKupaSayisi());
        holder.tv_kurulus_yili.setText(listTakim.get(position).getKurulusTarihi());
    }

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

}

Item click olaylarını yakalamak için bir tane interface tanıplayıp onun metotlarını ezdik. RecyclerViewItemClickListener.java

public interface RecyclerViewItemClickListener {

    //Tıklama olayında Yakalama
    void onItemClick(View view, int position);

    //Uzun Tıklama Olayında Yakalama
    void onItemLongClick(View view, int position);

}

Modelimiz ve Adapterımız hazır, şimdi MainActivity de verilerimizi dolduralım. MainActivity.java

public class MainActivity extends Activity {

    public RecyclerView recyclerView;
    private TakimlarAdapter adapter;
    private RecyclerView.LayoutManager layoutManager;
    private List<ModelTakim> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.rc_view);
        init();
    }

    private void init() {
        list = new ArrayList();
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        dataLoad();
        adapter = new TakimlarAdapter(this, list);

        adapter.setOnItemClickListener(new RecyclerViewItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                //item click,
                Toast.makeText(MainActivity.this, "Takım : " + list.get(position).getTakimAdi(), Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onItemLongClick(View view, int position) {
                Toast.makeText(MainActivity.this, "Uzun bastın", Toast.LENGTH_SHORT).show();

            }
        });
        adapter.notifyDataSetChanged();
        recyclerView.setAdapter(adapter);
    }

    private void dataLoad() {

        ModelTakim takim1 = new ModelTakim();
        takim1.setId(1);
        takim1.setTakimAdi("Galatasaray");
        takim1.setKurulusTarihi("1905");
        takim1.setKupaSayisi("20");
        list.add(takim1);

        ModelTakim takim2 = new ModelTakim();
        takim2.setId(2);
        takim2.setTakimAdi("Fenerbahçe");
        takim2.setKurulusTarihi("1907");
        takim2.setKupaSayisi("19");
        list.add(takim2);

        ModelTakim takim3 = new ModelTakim();
        takim3.setId(3);
        takim3.setTakimAdi("Beşiktaş");
        takim3.setKurulusTarihi("1903");
        takim3.setKupaSayisi("14");
        list.add(takim3);

        ModelTakim takim4 = new ModelTakim();
        takim4.setId(4);
        takim4.setTakimAdi("Mersin İdman Yurdu");
        takim4.setKurulusTarihi("1925");
        takim4.setKupaSayisi("25");
        list.add(takim4);
        //istediğiniz kadar takım ekleyebilirsiniz.
    }
}

main_activity.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:gravity="center"
    android:orientation="vertical">

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

</LinearLayout>
   

Bu şekilde RecyclerView nesnesini kullanabiliriz. Recyclerview ın bir çok özelliği var bu örnek sadece temel olarak listeyi doldurmaktı. İlerleyen yazılarda farklı özelliklerini kullanacağız.

İyi çalışmalar..

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s