AndroidX - Navigation Architecture

En son güncellendiği tarih: May 30


Görsel Referansı

AndroidX


Google topladığı geri bildirimlerle birlikte Android Support Library'nin yerine yeniden düzenlenmiş bir kütüphane olan AndroidX 'i piyasaya sürdü.


Neden AndroidX?


  • AndroidX 'deki tüm paketler androidx dizesiyle başlar.

  • Herhangi bir sürüm karmaşası yaratmaz.

  • AndroidX paketleri ayrı ayrı korunur ve güncellenir.

  • AndroidX paketleri 1.0.0 'dan başlayarak Semantic Version kullanır.


Kısaca AndroidX en gelişmiş açık kaynak kodlu kütüphane olmak ile birlikte Support Library'i ve Jetpack component'lerini kapsayan bir kütüphanedir denilebilir.


(Sürüm 28.0.0 Support Librariy'nin son sürümüdür)


Peki AndroidX ve Support Library arasındaki fark nedir?


  • Support Library'de programcının hata almaması adına tüm mevcut kütüphaneler aynı versiyon üzerinde çalışmak zorundaydı. AndroidX’in gelmesiyle beraber Support Library'nin oluşturmuş olduğu bu bağımlılıklar ortadan kalktı.

  • Support Library'e nazaran AndroidX kütüphane isimleri daha kısadır.

  • Her bir library için desteklenilen sürümleri bulmak meşakkatli bir işti. AndroidX ise hepsini destekliyor.



Mevcut projeyi AndroidX'e geçirmek için:


  • Projenizi açın


  • Android Gradle Build Version 3.2 veya üzeri ayarlanmalı


  • Gradle Version 4.6 veya üstü olmalı


  • CompileSdkVersion 28 veya üstü olmalı


  • Refactor/Migrate to AndroidX : Link'e tıklayarakta görebilirsiniz.





















Kısa bir özet geçecek olursak Google tüm kütüphaneleri tek bir dizinde tutmak için AndroidX'i piyasaya sürdü. Peki bu ne demek?


Support Library için bir kütüphaneyi implement ederken şu şekilde implement ediyorduk:



AndroidX'de bir kütüphaneyi implement ederken ise:



Görüldüğü üzere AndroidX'de paketler tek bir yapıda tutuldu. Ayrı ayrı tutulup artık güncelleme sorunu alınmaması üzerine bir yapı inşa edildi.


AndroidX 'i yeteri kadar kavradıysak asıl konumuz olan Navigation Architecture'e geçme vakti.



Navigation Architecture



Navigation temel olarak kullanıcının uygulamasındaki yolculuğunu yöneten bir bileşendir.

Navigation Architecture fragment, transaction gibi işlemleri, view'lar arasındaki verileri daha sağlıklı aktarmamıza olanak sağlar. MVVM mimarisi ile çalışır.


Temel olarak kullanıcı uygulamamızda gezindiğinde uygulamamızın karmaşıklığına bağlı olarak ekrandan ekrana geçişleri tam olarak nasıl yaptığımıza dair bir desen uygular. Kodda bazı işlevleri çalıştırarak iki veya daha fazla fragment arasında geçiş yapmayı ve veri aktarmayı sağlar.


Basit bir örnek ile yapıyı daha iyi bir şekilde kavrayalım:


  • Android Studio'muzda açtığımız projeyi AndroidX kütüphanesini dahil ettiysek devam edelim.


  • Öncelikle Navigation Architecture'i kütüphanemize implement edelim. Bunun için build.gradle(Project:..)'i açıp dependencies içerisine classpath ekleyelim:


  • Daha sonra build.gradle(Module:app)'i açıp aşağıdaki plugini ekleyelim:


  • Dependencies üzerine def diyerek Navigation Architecture versiyonumuzu girelim:


Not: Benim yazdığım nevVersion yerine kendi parametrenizi girerek versiyonunuzu yazabilirsiniz.


  • Son olarak navigation architecture'i implemet edelim:


İlk adımımızı tamamladığımıza göre projemize başlayalım.


Projede kendi ihtiyacınıza göre fragmentler açabilirsiniz. Ben şuanlık DetailFragment ve ListFragment adında 2 fragment oluşturuyorum. Bu iki fragment MainActivity'de görünecek 2 fragmenttir. Ben bunları Navigation Architecture ile kullanmak için xml'lerine <layout etiketini ekliyorum. Bu navigasyon çerçevemizin bir parçası olduğunu söylememize yardımcı olur.



fragment_detail.xml'i de aynı şekilde layout etiketleri arasında yazıyoruz. Neden layout etiketini kullanıyoruz. Bunu göstermek için res içerisinde new resource file'ı seçip:


  • Bir navigation dosyası altında navigation isminde xml oluşturduk. Bu bizim transaction'ları yapabileceğimiz ve görebileceğimiz yer.

  • Navigation'ın ana bileşeni navigation graph'dır. Eğer bir geçiş tanımlarsak ikisi arasında geçiş yapmamıza olanak sağlar.



Layout etiketlerini bu sebep ile kullandık. Burada kullanmak istediğimiz fragmentleri layout etiketleri arasına alıyoruz. Bu sayede burada New Destination diyerek istediğimiz fragmenti ekleyip istediğimiz işlemleri kolaylıkla yapabiliriz. Ben iki fragmentimi de ekliyorum.




İki sayfamı da ekledim ancak henüz aralarında herhangi bir bağlantı kurmadım. Uygulamamda ListFragment MainActivity'de açılacak ilk fragmenttir. Ben ListFragment'den DetailFragment'e geçiş yapmak istiyorum. Bunun için ListFragment'in kancasından tutup DetailFragment'e bir ok çıkartacağım. Böylelikle iki fragment'i bağlamış olacağız.


Burada temel olarak bir işlem yapmış oluyoruz. Aynı bağlantıyı Detail'den List'e yapalım.


Bağlantı noktası id'lerine dikkat edelim!





Daha sonra MainActivity'mize gidip bu navigation graph'ini kullanarak hareket etmek istediğimizi belirtelim.


Bu işlemden sonra projenizi Build-Clean Project yapıp daha sonra Build-Rebuild Project etmemiz gerekir.



Şimdi activity_main.xml'e gelip navHostFragment'i xml'e dahil etmeliyiz. Burada farkettiyseniz navGraph = ".." diyerek navigation graph'ını MainActivity'e dahil etmiş olduk.


Şimdi ListFragment'den DetailFragment'e, DetailFragment'den ListFragment'e geçiş yapacak butonlarımızı ekleyip kodumuzu yazalım.


Her iki fragment'e FloatingActionButton ve TextView ekleyelim ve kod kısmına geçelim.

ListFragment.kt'de yapmak istediğim floating action button'a tıkladığımda DetailFragment'e geçişi sağlamak olduğu için öncelikle butonumuza tıklama eylemi verelim:



Şimdi bu tıklama eylemi gerçekleşince yapılacak işlemleri tanımlamamız gerekiyor. Yapmak istediğim işlem ListFragment'den DetailFragment'e geçiş olduğu için action adında bir variable tanımlayalım ve bu variable bizim List'den Detail'a geçiş yapacağımızı yazsın.



Burada ne yaptık?


Graph'ı oluşturduktan sonra Build ettiğimizde Android her bir fragment için bir Directions oluşturdu. Bu directions ile graph'taki ok id'si ile nerden nereye gideceğimizi belirttik.


Detail içinde aynısını yapıp çalıştırdığımızda sayfa geçişlerini görebiliriz.


Şimdi iki fragment arasında nasıl veri aktaracağımıza bakalım:


Öncelikle ListFragment'imize navigation graph'ından bir argument ekliyorum. Argument eklemek için navigation graph'ının xml'ini açalım.



Gördüğünüz gibi argument tagları arasına istediğimiz argument'ı ekliyoruz. Bu argument ile butona tıklayınca Edittext'e yazılan name değişkeninin DetailFragment'te gösterilmesini istiyorum.


O zaman ListFragment'e butona tıklanma olayına gidelim



Burada şunu diyoruz:

Butona tıklayınca edittext'de yazdığım ifadeyi argName olarak kaydettiğim ifade yap.

Artık DetailFragment'de bu argName'i alıp bir yere kaydedip gösterebiliriz. Bunun için:



ListFragmentten gelen değişkeni nameArgs ile tuttuk.

Son olarak sayfa geçişlerinde ki animasyon için graph'da ki animasyonları kullanabilirsiniz



Projeyi github linkinden indirebilirsiniz: https://github.com/demirtasm/LearnNavigationArch/tree/master/develop/LearnNavigationArch


#androidx #navigationarchitecture


Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
JetBrains Hakkında Detaylı Bilgi Alın

© 2020 by mobiler.dev

mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın