Bu dersimizde recyclerview uygulamamıza devam ediyoruz. Bu derste custom adapter’ımızı hazırlayacağız.
Adapter kavramı veri kayanğı ile viewlar arasında veri dönüşümünü yapan yapılara denir. Daha önceki derslerde de kullandığımız bu adapter ile veri kaynağından okuduğumuz verileri layoutumuza ve ilgili view öğesinde kullanarak kullanıcıya gösteririz.
Recyclerview kullanırken herhangi bir optimizasyon yapmamız gerekmiyor(daha önce listview ve gridviewda yapmıştık) Adapterimizi oluştururken belli kuralları uygularsak recyclerviewımız etkin ve esnek bir şekilde çalışacaktır.
Bunun için adapter sınıfını Recyclerview.Adapter sınıfından türetmemiz gerekiyor. Ve bu sınıfta kullanılacak olan ViewHolder sınıfını da RecyclerView.ViewHolder sınıfından türetmeliyiz ki recyclerviewımız düzgün bir şekilde çalışsın. Adapter sınıfındaki methodlar şu şekildedir:
onCreateViewHolder: Uygulama açıldığında ilk kez ekrana gelen liste öğeleri için inflater işlemi yani xml layoutu javaya çevrilmesi yapılacak. Daha önceki baseadapter sınıfında convertview==null diye bir kıyas yapıyorduk. İşte recyclerviewda convertviewın null olduğu durumlar için bu method çalıştırılıyor.
onBindViewHolder: Inflate edilen viewların veri kaynağından okunan verilerle doldurulması/bağlanması işlemidir. Bu method iki parametre alır. 1. parametre inflate edilen layout nesnesi, ikinci parametre ise oluşturlacak olan satırın indexini tutan position değeridir.
NOT:VIDEODA NEDENSE TIKLANILAN ÖĞE DIYE ANLATMISIM AMA BURDA TIKLANMA OLAYI SOZ KONUSU DEĞİL, POSITION DEGERINE GORE YENİ BIR LISTE ÖĞESİNİN OLUŞTURULMASI İŞLEMİNDE BU METHOD KULLANILIR.
getItemCount: Listemizin kaç elemanlı olduğu bilgisini dönderen methodtur.
Bu derste yazılan EmreAdapter.java kodu aşağıdadır. Bir önceki derste yazılan kodlarını da aşağıda bulabilirsiniz. Uygulamanın bitmiş halini ve kullanılan resimleri indirmek için LÜTFEN BURAYI tıklayınız…..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
package com.example.emrealtunbilek.materialrecyclerviewornek; import android.content.Context; import android.support.v7.widget.ContentFrameLayout; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; public class EmreAdapter extends RecyclerView.Adapter<EmreAdapter.MyViewHolder>{ ArrayList<Manzara> mDataList; LayoutInflater inflater; public EmreAdapter(Context context, ArrayList<Manzara> data){ //inflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater=LayoutInflater.from(context); this.mDataList=data; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v=inflater.inflate(R.layout.list_item, parent,false); MyViewHolder holder=new MyViewHolder(v); return holder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { Manzara tiklanilanManzara=mDataList.get(position); holder.setData(tiklanilanManzara, position); } @Override public int getItemCount() { return mDataList.size(); } class MyViewHolder extends RecyclerView.ViewHolder{ TextView mManzaraBaslik, mManzaraAciklama; ImageView mManzaraResmi, mSilResmi, mKopyalaResmi; public MyViewHolder(View itemView) { super(itemView); mManzaraBaslik= (TextView) itemView.findViewById(R.id.tvManzaraBaslik); mManzaraAciklama= (TextView) itemView.findViewById(R.id.tvManzaraTanim); mManzaraResmi= (ImageView) itemView.findViewById(R.id.imgManzara); mSilResmi=(ImageView) itemView.findViewById(R.id.imgSil); mKopyalaResmi=(ImageView) itemView.findViewById(R.id.imgKopyala); } public void setData(Manzara tiklanilanManzara, int position) { this.mManzaraBaslik.setText(tiklanilanManzara.getBaslik()); this.mManzaraAciklama.setText(tiklanilanManzara.getTanim()); this.mManzaraResmi.setImageResource(tiklanilanManzara.getImageID()); this.tiklanilanOgeninPositionDegeri=position; this.kopyalanacakManzara=tiklanilanManzara; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
import java.util.ArrayList; public class Manzara { private int imageID; private String baslik; private String tanim; public int getImageID() { return imageID; } public String getBaslik() { return baslik; } public String getTanim() { return tanim; } public void setImageID(int imageID) { this.imageID = imageID; } public void setBaslik(String baslik) { this.baslik = baslik; } public void setTanim(String tanim) { this.tanim = tanim; } public static ArrayList<Manzara> getData(){ ArrayList<Manzara> dataList=new ArrayList<Manzara>(); int[] resimler= { R.drawable.thumb_1_0, R.drawable.thumb_1_1, R.drawable.thumb_1_2, R.drawable.thumb_1_3, R.drawable.thumb_1_4, R.drawable.thumb_1_5, R.drawable.thumb_1_6, R.drawable.thumb_1_7, R.drawable.thumb_1_8, R.drawable.thumb_1_9, R.drawable.thumb_2_0, R.drawable.thumb_2_1, R.drawable.thumb_2_2, R.drawable.thumb_2_3, R.drawable.thumb_2_4, R.drawable.thumb_2_5, R.drawable.thumb_2_6, R.drawable.thumb_2_7, R.drawable.thumb_2_8, R.drawable.thumb_2_9, R.drawable.thumb_3_0, R.drawable.thumb_3_1, R.drawable.thumb_3_2, R.drawable.thumb_3_3, R.drawable.thumb_3_4, R.drawable.thumb_3_5, R.drawable.thumb_3_6, R.drawable.thumb_3_7, R.drawable.thumb_3_8, R.drawable.thumb_3_9, R.drawable.thumb_4_0, R.drawable.thumb_4_1, R.drawable.thumb_4_2, R.drawable.thumb_4_3, R.drawable.thumb_4_4, R.drawable.thumb_4_5, R.drawable.thumb_4_6, R.drawable.thumb_4_7, R.drawable.thumb_4_8, R.drawable.thumb_4_9, R.drawable.thumb_5_0, R.drawable.thumb_5_1, R.drawable.thumb_5_2, R.drawable.thumb_5_3, R.drawable.thumb_5_4, R.drawable.thumb_5_5, R.drawable.thumb_5_6, R.drawable.thumb_5_7, R.drawable.thumb_5_8, R.drawable.thumb_5_9, R.drawable.thumb_6_0, R.drawable.thumb_6_1, R.drawable.thumb_6_2, R.drawable.thumb_6_3, R.drawable.thumb_6_4, R.drawable.thumb_6_5, R.drawable.thumb_6_6, R.drawable.thumb_6_7, R.drawable.thumb_6_8, R.drawable.thumb_6_9, R.drawable.thumb_7_0, R.drawable.thumb_7_1, R.drawable.thumb_7_2, R.drawable.thumb_7_3, R.drawable.thumb_7_4 }; for(int i=0; i<resimler.length; i++){ Manzara gecici=new Manzara(); gecici.setImageID(resimler[i]); gecici.setBaslik("Manzara "+i); gecici.setTanim("Tanım bilgisi "+i); dataList.add(gecici); } return dataList; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?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:id="@+id/activity_main" 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="com.example.emrealtunbilek.materialrecyclerviewornek.MainActivity"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/recyclerview" > </android.support.v7.widget.RecyclerView> </RelativeLayout> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_marginTop="5dp" app:cardCornerRadius="5dp" android:id="@+id/rootCardView" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white" android:orientation="horizontal" > <ImageView android:layout_width="60dp" android:layout_height="60dp" android:id="@+id/imgManzara" android:src="@drawable/thumb_1_0" /> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:orientation="vertical" android:layout_weight="1" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Manzara" android:textSize="18sp" android:id="@+id/tvManzaraBaslik" android:textStyle="bold" android:layout_margin="7dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Manzara Tanım" android:textSize="14sp" android:id="@+id/tvManzaraTanim" android:textStyle="italic" android:layout_marginLeft="7dp" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <ImageView android:layout_width="20dp" android:layout_height="20dp" android:layout_margin="7dp" android:id="@+id/imgSil" android:tint="@color/colorAccent" android:src="@drawable/ic_delete"/> <ImageView android:layout_width="20dp" android:layout_height="20dp" android:layout_margin="7dp" android:id="@+id/imgKopyala" android:tint="@color/colorAccent" android:src="@drawable/ic_make_copy"/> </LinearLayout> </LinearLayout> </android.support.v7.widget.CardView> |
Merhabalar Emre bey,
EmreAdapter.java sınıfında 79. ve 80. satırların ilerleyen derslerde eklenmesi gerektiğini düşünüyorum. Aynı hata 10. ders blog yazınızda mevcuttur.
79 this.tiklanilanOgeninPositionDegeri=position;
80 this.kopyalanacakManzara=tiklanilanManzara;
Evet kaan teşekkür ederim,, yazının içinde not olarak düştüm burdan tekrar belirteim tıklanılanOge dediği aslında o an listede oluşturulan eleman demek.
bişey soracam emre bey ben bu listeleme işlemini sqllite tüm verileri listelemek için kullanmak için istiyorum bana ufak bi örnek yapıp yollayabilirmisin veya kod bloğunda nereyi nasıl değiştirecem gösterebilirmisin
Merhaba
Udemy’de bu sorunun çok daha fazlasını bulabileceğin eğitim setine ulaşabilirsin.
https://www.udemy.com/android-broadcast-receiver-services-ve-sqlite-egitim-seti/?couponCode=BAYRAMHEDIYE
bişey soracam emre bey ben bu listeleme işlemini sqllite tüm verileri listelemek için kullanmak için istiyorum bana ufak bi örnek yapıp yollayabilirmisin veya kod bloğunda nereyi nasıl değiştirecem gösterebilirmisin
bişey soracam emre bey ben bu listeleme işlemini sqllite tüm verileri listelemek için kullanmak için istiyorum bana ufak bi örnek yapıp yollayabilirmisin veya kod bloğunda nereyi nasıl değiştirecem gösterebilirmisin