Herkese Merhaba, yazımda(aslında ilk yazım) size fragmentler arası veri taşımanın 1.3.0-alpha04
ile birlikte hayatımıza giren “setResultListener” ve “setResult” kavramlarına değinmek istiyorum.
Bu kavramlar çıkmadan önce “onActivityResult” ve “startActivityForResult” ile dinlemeler yapıyor veya “Interface” kullanıyorduk. Bu kavramların hayatımıza girmesiyle işimiz çok daha kolay olacak diyebilirim, eski yöntemden bir kesit vermek istiyorum.
Fragment içerisinde geri döndürmek istediğimiz dataları “onActivityResult” override ederek actvity içinde yakalayabiliyorduk örneğin:
Bu şekilde pek sıkıntı yok fakat projenin büyümesiyle buranın okunurluğu ve test edilebilirliği ters oran ile düşecektir.
Bu kadar zahmet bu kadar kafa yormadan sonra böyle bir API çıkması gerçekten mutluluk verici oluyor bazı durumlarda bence o durumlardan birisi bu API ile tekrar etti diyebilirim :)
Bir kaç kere deneme şansım oldu ve herhangi bir problem yaşamadan çok akıcı ve basit bir şekilde bı API ile işlemlerimi gerçekleştirdim ayrıca Alfa sürümünde olmasınu göz önünde bulundurmalıyız.
O zaman bu bahsettiğim Alfa sürümünde olan “Result API” entegrasyonuna geçebiliriz.
Öncelik ile gerekli bağımlıkları gradle dosyamıza entegre etmeliyiz
Öncelike anlatman önce durumlara bölmek istiyorum Result Api’yi
- Fragment B’den Fragment A’ya veri göndermek
- Fragment A’dan Fragment A’nın içerisindeki çocuk fragment’e yani Fragment C’ye göndermek
- Durumdan başlayalım
Öncelikle veriyi almak istediğim fragment’e result api ile birlikte gelen “setResultListener” kullanarak Fragment A’da bir dinleme başlatıyoruz. (Gerekli açıklamları yorum satırı olarak belirttim)
Dinleyici yaşam döngüsü onStart olmadan gelen verileri maalesef yaklayamaz bu duruma lütfen dikkat edin!
Daha sonra bu dinleyiciye veriyi göndermek üzere aşağıdaki yapıyı oluşturmalıyız. (Gerekli açıklamaları yorum satırı olarak belirttim)
Not: RequestKey’i birden fazla dinleyen dinleyici var ise fragmentManager en son döndürdüğü dinleyiciye veriyi gönderir.
Not2: RequestKey’i dinleyen dinleyici yok ise dinleyici bulunana kadar veriler FragmentManager’da saklanmaya devam eder.
Bu anlatım aynı zamanda Fragment’ten Activity’e veri göndermek içinde kullanılabilir.
Bu şekilde Fragmentler arası verilerin yeni yayınlanan alfa sürümünde olan ResultApi ile nasıl taşınabileceğini öğrenmiş olduk.
Bu durumu görseleştirmek gerekir ise;
Gelelim ikinci duruma yani Fragment A’dan Fragment A’nın içerisindeki çocuk fragment’e yani Fragment C’ye göndermek.
Aslında işlemler aynı sadece bir kaç sözdizimi farkı var hemen örnek yapıyı ekliyorum.
Dinleyici oluşturduğumuza göre keyi dinleyen dinleyiciyi beslememiz gerekiyor.
Bu şekilde çocuk fragment’ten parent fragment’e veri gönderme durumunu işlemiş olduk. Genel olarak özetlememiz gerekirse çocuktan parent fragment’e fragment’ten parentine yani activitye verileri artık çok kolay gönderebiliyoruz
Bu durumu görseleştirmek gerekir ise;
Yazım buraya kadardı teşekkür ederim.
Araştırmalarımdan edindiğim bilgiler ile bir makale yazmak istedim hala acemiyim bu sebep ile eğer yanlış bir şey belirttiysem eksik veya noksan var ise kusuruma bakmayın belirtirseniz ivedik ile düzeltirim.
Bu yazıyı yazarken bir şey öğrendim o da eğer bir konuyu bir durumu yapıyı öğrenmek istiyorsanız gerçekten onu anlatın veya anlatmaya çalışın. :)