Android RecyclerView Örneği

Android RecyclerView Örneği

Merhaba arkadaşlar ,

Bu yazımda Android L ile hayatımıza giren RecyclerView’den bahsetmek istiyorum. RecyclerView genellikle tekrar eden veri modelleri için kullanılır. Uzak sunucudan daha önce modellenmiş veriyi alıp , arayüze aktarır. Twitter’daki anasayfanızı düşündüğünüz zaman onun da RecyclerView olduğunu anlayacaksınız. Neyse , uzatmadan konuya geçelim.

Gereksinimler :

  • Android Studio
  • Min. SDK 14
  • Target SDK 19
  • Test için kurulmuş emülator ya da Android telefon

Android Studio’dan bir adet boş proje oluşturalım.

Ardından build.gradle gidip  aşağıdakileri kütüphaneleri ekleyiniz.


dependencies{
compile 'com.android.support:cardview-v7:23.0.+'
compile 'com.android.support:recyclerview-v7:23.0.+'}

Öncelikle , activity_main layoutuna RecyclerView’i ekleyelim oluşturalım. Aşağıdaki kodu activity_main’e ekleyin. (Fragment kullanacaklar için ilgili fragmentin layoutuna koymanız gerekmektedir).

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

Böylelikle RecyclerView’in burada görüneceğini belirtmiş olduk. Şimdi ise RecyclerView’in nasıl göründüğünü ayarlamaya geçelim.

Bunun için list_cardview_layout isminde bir layout dosyası oluşturdum. Siz de istediğiniz bir isimle oluşturun. Bu layout ise RecyclerView içerisinde göstereceğimiz yazı , resim vb. şeylerin gözükeceği layout olacaktır.

Kullanacağım örnekte sadece yazılar olacağı için aşağıdaki gibi bir layout hazırladım. Bunu deneyip olayını mantığını anladığınızda kendi tasarımınızı da yapabilirsiniz.

<?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="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/info_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text=" "
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</android.support.v7.widget.CardView>

Tasarım kısmını hallettik sanırım. Buraya kadar pek zor bir şey yok zaten. Şimdi ise kod kısmına geçelim.

RecyclerView’de gösterilecek verileri bir RecyclerView Adapter aracılığı ile RecyclerView’e bağlarız. Ne demek istediğimi birazdan anlayacaksınız.

Öncelikle Adapter kısmını kodlayalım.

MyDataAdapter isminde bir sınıf oluşturdum. Siz de dilediğiniz isimde açabilirsiniz.

public class MyDataAdapter extends RecyclerView.Adapter<MyDataAdapter.ViewHolder>

Şeklinde sınıf tanımlamasını yaptıktan sonra ViewHolder sınıfını yine MyDataAdapter sınıfının içerisinde oluşturalım. Bu sınıf list_cardview_layout kısmındaki görüntüleri tanımlayacağımız yer. Daha sonra bunlara Adapter’e gelen veriye göre işlem yapacağız.

 public static class ViewHolder extends RecyclerView.ViewHolder {
TextView info_textView;
public ViewHolder(View view) {
super(view);
this.info_textView = (TextView) view.findViewById(R.id.info_text);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(activity, info_textView.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
}
}

Daha sonra implement etmemiz gereken methodları (onCreateViewHolder , onBindViewHolder , getItemCount)  implement edelim.

public String[ ] NAMES_DATA;
public MyDataAdapter(Activity activity, String[] NAMES_DATA) {
this.NAMES_DATA = NAMES_DATA;       
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cardview_layout, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.info_textView.setText(NAMES_DATA[position]);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return NAMES_DATA.length;
}

Yukarıda implement ettiğimiz methodlardan bahsetmemiz gerekirse , onCreateViewHolder methodu RecyclerView’in olduğu layout’u bir nevi belirtiyoruz diyebiliriz. onBindViewHolder ise ViewHolder sınıfında tanımlamasını yaptığımız TextView , ImageView vb. şeylere adapterdeki verileri aktardığımız kısım diyebiliriz.
Son olarak da kurucu fonksiyona bir adet String dizisi gönderiyoruz. Bu dizi bizim hangi verileri göstereceğimizi içerecek olan dizimiz. Ne demek
istediğimi birazdan anlayacağınızı düşünüyorum.

MainActivity sınıfım da aşağıdaki gibidir.

RecyclerView recyclerView;
private RecyclerView.LayoutManager mLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
recyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(mLayoutManager);
MyDataAdapter myDataAdapter = new MyDataAdapter(MainActivity.this, LISTS);
recyclerView.setAdapter(myDataAdapter);
}
static final String[] LISTS = new String[]{"İsim : Mustafa" + "nSoyisim : ALP ", "Facebook : http://fb.com/alpmusti38" ,

Uygulamanın sonucundaki ekran görüntüsü aşağıdaki gibidir.

Ayrıca , örnek bir projemde kullandığım Adapter örneklerine buradan ulaşabilirsiniz.


Paylaş :

Full Stack Developer · Yazılım Tutkunu · Fikir, kod ve teknoloji Daha fazlası için hakkımda sayfasını ziyaret edebilirsiniz.



Bu yazı hakkındaki görüşünü benimle paylaşmaya ne dersin ?


Email adresiniz yayınlanmayacaktır.

Yorum yap butonuna
bastıktan sonra yorumunuz gönderilecektir. Yorumunuz incelenip onaylandıktan sonra diğer ziyaretçilerimiz tarafından da görünecektir. Lütfen, yorum yaparken saygı çerçevesinde ve hakaret etmeden yorum yapmaya özen gösteriniz.

Bu yorumu göndererek bu uyarıları okuduğumu ve kabul ettiğimi onaylıyorum.