Android Veri Taşıma Yöntemleri — 1

Sertaç Ayhan
Huawei Developers - Türkiye
3 min readFeb 16, 2023
cover

Giriş

Herkese merhaba, aslında bu başlıkta çok fazla makale ve örnek mevcut, fakat bu yazı serisinde Android işletim sistemindeki hemen hemen bütün veri taşıma yöntemlerini ele almak istedim. Bunu da bir makale serisi olarak sizlerle paylaşmaya karar verdim. Anlatmaya, geleneksel, alışılagelmiş yöntemlerden değil, android developer dökümanlarda bulabileceğiniz fakat çok fazla bilinmeyen, şahsen benim de, beraber çalıştığımız sıralarda, değerli arkadaşım Oguz Şahin sayesinde öğrendiğim ve çok sevdiğim veri taşıma yöntemlerini anlatarak başlayacağım. Bilmeyenlerin de çok beğeneceğini düşünüyorum. O zaman başlayalım.

Fragment Result API Kullanarak veri paylaşımı:

Başlığı okuyunca bu da ne diyebilirsiniz. Hemen bir örnek ile başlayalım; Bazı durumlarda, iki fragment arasında veya bir fragment ile host activity’si arasında tek seferlik bir değer iletmek isteyebilirsiniz. Üç başlık altında inceleyelim.

  1. İki fragment arası veri paylaşımı:

Örneğin, Kullancıdan veri alan ve verileri önceki bir fragment’a geri ileten bir fragment’ınız olabilir.Buna en güzel örnek, en son geliştirdiğimiz uygulamada, kullanıcıdan çokça veri alan bir fragment’ın, TimePicker ve DatePicker fragmentları yardımıyla kullanıcıdan aldığı verileri, önceki fragment’a taşımamız gerekiyordu. Pickerları daha önce kullanmadıysanız referanslar kısmındaki 1 numaralı linkten inceleyebilirsiniz.

Fragment sürüm 1.3.0 ve üzeri sürümlerde, her FragmentManager, FragmentResultOwner implement eder. Bu, bir FragmentManager’ın fragment sonuçları için merkezi bir depo görevi görebileceği anlamına gelir. Bu değişiklik, bileşenlerin, fragment sonuçlarını ayarlayarak ve bu sonuçları dinleyerek, bu bileşenlerin birbirine doğrudan referansları olmasını gerektirmeden birbirleriyle iletişim kurmasını sağlar.

Fragment B’den fragment A’ya veri taşımak için öncelikle fragment A’ya bir result listener tanımlıyoruz. Bunu yapmak için setFragmentResultListener() methodunu fragment A’nın onCreate() methodunda (Dökümanda FragmentManager’da diye geçiyor fakat burası biraz çokomelli) örnekte olduğu gibi çağıralım.

FragmentManager’ı daha önce duymamış olabilirsiniz. Kısaca açıklamak gerekirse FragmentManager, uygulamanızın fragmentları üzerinde ekleme, kaldırma veya değiştirme ve bunları backstack’e ekleme gibi işlemler yapmaktan sorumlu sınıftır.

FragmentManager ile ilgili daha ayrıntılı bilgi için referanslar kısmındaki 2 ve 3 numaraları linklere gözatabilirsiniz.

Pass data between fragments

Verinin gönderileceği fragment olan B’de ise , aynı requestKey’i kullanarak sonucu aynı FragmentManager’da ayarlamanız gerekir. Bunu setFragmentResult() API’ını kullanarak yapabilirsiniz:

Fragment A, Fragment B’nin lifecyle.State’i STARTED iken veriyi alır ve listener callback’i yerine getirir.

Daha fazla bilgi için referanslar kısmındaki 4 ve 5 numaraları linklere gözatabilirsiniz.

Bu şekilde veri taşımak istediğinizde dikkat etmeniz gereken bir nokta var. İki fragment’ın da nav_graph’ta ekli olması gerekiyor. Aksi halde veri taşımayı gerçekleştiremiyorsunuz. Bizzat başıma gelen bir hata olduğu ve çözmek için 45 dakika uğraştığım için değinmek istedim.

2) Parent ve child fragmentlar arasında veri paylaşımı

Child fragment’tan parent fragment’a veriyi göndermek için, parent fragment setFragmentResultListener() fonksiyonunu çağırırken getParentFragmentManager() fonksiyonu yerine getChildFragmentManager() fonksiyonunu kullanmalıdır.

pass data between child and parent fragments

Child fragment sonucu kendi FragmentManager’ında setler. Parent fragment sonucu, child fragment STARTED state’indeyken alır:

3) Fragment ile Host Activity arasında veri paylaşımı

Fragment’taki veriyi host activitye taşımak için, set a result listener on the fragment manager içinde getSupportFragmentManager() kullanarak bir result listener oluşturalım. Yine aynı şekilde veri gönderimini tetikleyeceğimz yerde setFragmentResult’ı tanımlıyoruz.

Sonuç

Bu makale için şimdilik bu kadardı. Bir sonraki makalede ViewModel aracılığıyla veri nasıl taşınır bundan bahsedip örneklerle açıklamaya çalışacağım. Umarım bu makaleyi faydalı bulmuşsunuzdur, herhangi bir yorumunuz veya öneriniz varsa yorumlar kısmından bildirebilirsiniz. Bir sonraki makalede görüşmek üzere

Referanslar

1- Pickers

2- Fragment Manager

3- Fragment Lifecycle

4- Lifecycle (Architecture)

5- Lifecycle.State

--

--