Android Navigation Architecture

Hüseyin Serkan Özaydin
4 min readDec 4, 2018

--

Merhabalar, bu yazımda uzun zamandır ilgimi çeken ama ne yazık ki bakmak için pek fazla vakit bulamadığım ve Google IO’18 ‘de tanıtılan Android Navigation Architecture yapısına değinmek istiyorum.

Ama bundan önce değinmek istediğim 2 konu var;

1- AndroidX Nedir?

2- Neden Android Navigation Architecture gibi bir yapı sunuldu?

AndroidX

Google artık tüm Android paketlerini tek bir yapıda tutmak istiyor. Yani tüm paketlere tutarlı bir isimlendirmede tutmak istiyor. Peki bu ne demek? Şöyle bir örnek ile açıklayalım.

Eskiden constraint layoutu projeye eklemek için şunu Build.gradle (app) dosyasına eklerdik

Peki AndroidX geldikten sonra ne yapıyoruz

Tüm listeyi şu linkte bulabilirsiniz

Şunu belirteyim AndroidX geçmişe yönelik api desteği vermekte.

AndroidX’i konuştuğumuza göre artık “Android Navigation Architecture” kısmına daha detaylı bir giriş yapabiliriz.

Android Navigation Architecture Gibi Bir Yapı Neden Sunuldu?

  • Fragment transactionu daha sağlıklı yönetmek
  • Back butonu gibi olayları yönetebilmek ( Örn: Siz activity içinde oluşturduğunuz 3.fragmenttesiniz ve “Back” butonuna basıyorsunuz. Kullanıcının burada tahmini şudur “2.fragmente geçmek” ama öyle olmaz ve Activity ölür)
  • View’lar arası verileri daha sağlıklı aktarmak.

Daha fazla detay için;

Artık yavaş yavaş Android Navigation Architecture’ye giriş yapabiliriz. Ondan önce Android Navigation Architecture nasıl yapıları destekliyor onlara bakalım.

  • Genellikle Fragment’ler için kullanılıyor
  • Activity’leri destekliyor
  • Alt navigationları destekliyor

Açalım Android Studio’yu ve şu işlemleri yapalım;

File->Settings->Experimental -> Enable Navigation Editor

Sonra projemizin Gradle dosyasına giriyoruz ve şunları ekliyoruz.

Artık Navigation yapımızı oluşturabiliriz.

Şimdi res dosyasının üstüne geliyoruz. Sağtık yapıyoruz “Android Resource File” a tıklayıp geri kalan konfigurasyonları aşağıdaki gibi yapıyoruz.

Res dizininin altında “navigation” adlı bir dizin oluşacak.

Bu ekranda şimdi bir şeyimiz yok.

Artık projemizde ne yapacağımızı belirleyebiliriz. Projemizde şu olacak; Kullanıcıdan bir isim alacağız ve başka bir ekranda bu isimi göstereceğiz.

Kullanıcıdan veri alacağımız fragmentin adı: UserInputFragment.java

Kullacıya veri göstereceğimiz fragmentin adı: UserShowInformationFragment.java

Bu iki fragmenti oluşturduk. Ve artık “nav_mob” ekranında ekranları listeyebiliriz.

Fragment’i Navigation’a eklemek için şunu yapıyoruz;

Ve açılmasını istediğimiz ilk fragmenti seçiyoruz ben burada “fragment_input” u seçtim.

Dediğimiz gibi birinci fragmentte kullanıcıdan isim alınacak ve ikinci fragmentte bu gösterilecek.

Şimdi bir fragmentten başka bir fragmente geçeceğimizi designda gösterdik

Şimdi bunun “Text” kısmına bakalım. Bunun için sol aşağıda bulunan “Text” sekmesine tıklayalım.

Tüm fragmentlerimiz bu ekranda gözüküyor. Ama “action” adında bir tag açılmış peki bu ne?

Aslında “Design” üstünde gösterirsek daha anlaşılır olur.

Bir fragmentten diğer bir fragmente geçerken kullanılan “OK” ‘a Xml tarafında “action” deniyor. Ve bu actionda fragmentten fragmente geçerken yapılmasını istediğiniz ( animasyon, veri aktarma vb.) tüm olayları belirleyebilirsiniz.

Her şeyimiz tamam ama şöyle bir sorun var bu fragmentler hangi “Activity” üstünde gösterilecek ? Daha bunu belirlemedik. Bu iş için en uygun “Activity” “MainActivity.class” .

MainActivity’nin Xml dosyasını Açalım Ve Şunları Ekleyelim

Bu kod parçaçığını ekledikten sonra Activity’mizin “Preview” kısmı şu şekilde gözükmeli. Yani artık “ UserInputFragment” ‘in Xml dosyası gözükmeli.

Buraya kadar her şey mükemmel ise artık “UserInputFragment” ‘ten “UserShowInformationFragment” e veri gönderip bunu gösterelim.

Navigation bir fragmentten diğer bir fragmente veri gönderirken Bundle kullanmaya izin veriyor. Yani verilerimizi “Bundle” ‘ye atıp öyle göndereceğiz.

Başlayalım.

Şimdi akıllarda bir soru “sendButton” a basınca uygulama nasıl hangi fragmente geçeceğini biliyor?

Hatırlarsanız yukarıda “Action’dan” bahsettik. Aşağıdaki kodu dikkatlice incelerseniz daha iyi anlayabilirsiniz.

Bizde

Navigation.findNavController(view).navigate(R.id.action_userInputFragment2_to_userShowInformationFragment,bundle);

Şu kod parçacığında uygulamanın hangi actionu kullanacağını söylüyoruz.

Şimdi gelelim “UserShowInformationFragment.java” bunun için bu fragmente gelen Bundle’yi parse etmemiz gerekiyor. Sadece bu sayede daha önce fragmentten gönderilen veriyi gösterebiliriz.

Artık kullanıcıdan gelen veriyi başka bir ekranda gösterebiliyoruz. Ve bunu Navigation Architecture Component ile yaptık.

Şuanlık anlatacaklarım bu kadar. Elimden geldiğince Navigation Architecture Component’i anlatmaya çalıştım. Araştırma yaparken birkaç Türkçe kaynak ile karşılaştım onları paylaşmak istiyorum.

Bugünlük anlatacaklarım bu kadar. Başka bir yazıda görüşmek üzere :)

--

--

No responses yet