RecyclerView, SearchView, Retrofit Kullanımı

Merhaba arkadaşlar,
mobilhanem.com üzerinden anlattığımız/yayınladığımız derslere bugün sizlere RecyclerView, SearchView, Retrofit Kullanımı nı bir arada anlatan bir uygulama yapacağım.Bu derse başlamadan önce RecyclerView ve CardView kullanımı ile ilgili bu dersimizi incelemeniz faydalı olacaktır.

Bu dersimizde nelere yer vereceğimize bakalım:

  • Retrofit ile rest api kullanımını bir kez daha pekiştirmiş olacağız.
  • Servisten gelen verileri RecyclerView içinde listeleyeceğiz.
  • SearchView android bileşeninin kullanımını öğreneceğiz.
  • RecyclerView da tıklama olaylarını interface yardımı ile nasıl çözebileceğimizi göreceğiz.
  • Listelenen veriler içinde Adapter sınıfımızda kullanacağımız getFilter fonksiyonu ile arama yaparak aradığımız veriye nasıl ulaşacağımızı göreceğiz.

Şimdi uygulamamızı oluşturmaya başlayalım; Android Studio da projemizi oluşturuyoruz ve uygulama içinde kullanacağımız kütüphaneleri build.gradle kısmına ekleyelim.

build.gradle

MainActivity sınıfımızın layout kısmında verileri listeleyebileceğimiz RecyclerView yapısını oluşturalım.

activity_main.xml

Daha sonra rest api den gelen verilere göre kendi Model yapımızı oluşturuyoruz. Ben model yapımı aşağıdaki servisten dönen json çıktısına göre; User, Address ve Company olarak şekillendirdim.

json çıktısı:

User.java

Address.java

Company.java

Verilere ulaşmak için erişeceğimiz rest api için gerekli ana url için bir Const sınıfı oluşturduk.

Const.java

Şimdi Retrofit yapısını kullanabilmek için öncelikle ApiClient sınıfını oluşturalım.

ApiClient.java

Şimdi interface sınıfımızı oluşturduk ve bu kodu detaylıca inceleyelim; @GET methodu ile GET isteğinde bulunacağımızı belirttik ve (“users“) parametresini bu methoda ek olarak verdik. Böylece GET methodu ile veriyi çekeceğimiz url şu şekilde olmaktadır:

Bildiğiniz üzere BASE_URL: https://jsonplaceholder.typicode.com/

GET methodu ile erişeceğimiz URL:  https://jsonplaceholder.typicode.com/users

getUsers methodu ile User tipinde verilerin yer aldığı bir liste döndürdüğünü görüyoruz. Retrofit de  Call<List<User>> şeklinde oluşturarak Call yapısı ile servisten gelen veri tipini Android kısmında oluşturduğumuz yapıyı belirtmektedir.

ApiInterface.java

Adapter sınıfımız için ekranda liste içinde göstereceğimiz layout yapısını oluşturalım.

list_item.xml

RecyclerView Tıklama Olayı

not: ( Bildiğiniz üzere RecyclerView de ListView de olduğu gibi setOnItemClickListener gibi bir method yok bu yüzden listemizde yer alan her bir iteme tıklandığında bunu algılayabilmemiz için bir takım işlemler yapmamız gerekiyor. Bu yüzden CustomItemClickListener adını verdiğimiz bir interface oluşturuyoruz. Oluşturduğumuz bu interface de Adapter da ilgili iteme tıklandığı anda o yerdeki User modelini ve position değerini MainActivity e göndermemize yardımcı olur. Bu şekilde tıklanma olayı ile ilgili işlemleri Adapter da değil de ilgili Activity de gerçekleştirmiş oluruz. Zaten Adapter ın görevi de verileri konumlandırma ve göstermedir.)

CustomItemClickListener.java

RecyclerView için verileri konumlandıracağımız bir adapter yapısına ihtiyacımız var şimdi adapter yapımızı oluşturalım.  Adapter sınıfımızı Filtereable dan implement ettiğimiz için getFilter methodunu zorunlu olarak tanımladık ve o method da yaptığımız işlemlere bakalım; MainActivity de yer alan SearchView de aramayı tetiklediğimizde performFiltering methoduna girilen karakter değeri gelir ve liste içinde yer alan User modellerinde userName değerine göre arama yapılır (başka değerlere göre de arama yaptırabilirsiniz ) eğer aranan değer hangi liste içinde yer alıyorsa o listedeki değer FilterResults methoduna atanır ve return ettirilir. Geri döndürülen değer publishResults methodu tarafından yakalanır ve adapter yenilenerek liste güncellenmiş olur.

CustomAdapter.java

Android Studio da res klasörü altında menu yapısını oluşturuyoruz. menu yapısı altına da menu_item adını verdiğimiz xml dosyasını oluşturduk burada SearchView bileşenini tanımlıyoruz.

menu_item.xml

Şimdi MainActivity sınıfımızı oluşturalım ve inceleyelim; GridLayoutManager da 2 değerini verdiğimizi göreceksiniz böylece adapter sınıfında oluşturduğumuz layout ekranda ikişer ikişer item oluşturmamızı sağlamaktadır. Yukarıda oluşturduğumuz Retrofit sınıflarını aşağıdaki şekilde kodladık ve servise istek yaptığımızda eğer hiç bir sorun yok ise yapılan istek de onResponse methodu tetiklenmektedir. response.body() de servisten gelen User tipinde liste dönmektedir. Gelen json tipindeki yapıyı ayrı ayrı parse edip ilgili modellere set etmiyoruz oluşturduğumuz bu yapı ile Retrofit kendisi bu işlemleri yapmaktadır ve istediğimiz veriyi bize geri döndürmektedir. Eğer herhangi bir hata var ise de onFailure methodu tetiklenmektedir. onCreateOptionsMenu de SearchView bileşenini tanımladığımızı göreceksiniz. setOnQueryTextListener methodu ile üst kısımda herhangi bir input değişikliği olduğunda tetiklenmektedir. onQueryTextChange de girilen input değeri değiştiği anda çalışan methoddur. onQueryTextSubmit ise girilen değerden sonra arama tuşuna basıldığında çalışan methoddur.

onQueryTextChange de adapter da tanımladığımız getFilter methodunda bulunan filter fonksiyonuna girilen değeri göndermektedir.

MainActivity.java

AndroidManifest xml dosyamızda aşağıdadır.

AndroidManifest.xml

Uygulamamızı çalıştırdıktan sonra ekran çıktımız aşağıdadır:

En üst kısımda bulunan arama iconuna bastığımız (SearchView) da oluşan ekran görüntüsü aşağıdadır.

Herhangi bir input yazdığımızda arama sonucunda oluşan ekran çıktımız:

 

Evet arkadaşlar bu dersimiz de RecyclerView, SearchView,Retrofit Kullanımını bir arada inceledik. Oluşturduğumuz bu uygulamayı en başından detaylıca anlatmaya çalıştım umarım herkese faydalı olur. Eğer en başından itibaren by yapıyı kendiniz oluşturmayacaksanız; dersin içinde yer alan kaynak kodu indirip incelemeniz faydalı olacaktır.

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

Mobilhanem.com üzerinden anlattığımız android uygulama geliştirme derslerine devam edeceğiz. Konu hakkında sorunuzu yorum alanından sorabilirsiniz. Konu dışı sorularınızı ve tüm yazılımsal sorularınızı sorucevap.mobilhanem.com sitemizden de sorabilirsiniz.

Bir dahaki dersimizde görüşmek dileğiyle..

Alper Beyler

Yüksek Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği
Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği (4/3.30) (2010-2014)
Lisans : Viyana Teknik Üniversitesi / Bilgisayar Bilimleri (2013)

10 Yorum

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?