Fragment'ler
Fragment'lerle modüler kullanıcı arayüzleri oluşturun. Fragment yaşam döngüsünü, fragment'lerde ViewBinding kullanımını, bağımsız değişken aktarımını, geri yığın yönetimini ve fragment-Activity iletişimini öğrenin.
Fragment'ler, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 7 dersinin 6. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 7 dersten oluşur.
Fragment'ler Nedir?
Fragment, bir Activity içinde yer alan ve yeniden kullanılabilen bir kullanıcı arayüzü modülüdür. Bunu, kendi düzeni, yaşam döngüsü ve mantığı olan bir alt Activity gibi düşünebilirsiniz.
Fragment'ler neden kullanılır?
- Kullanıcı arayüzünü birden fazla Activity'de yeniden kullanmak
- Telefon ve tablet için farklı düzenleri yönetmek
- Birden fazla Activity kullanmadan çok ekranlı akışlar oluşturmak
- Navigation Component ile doğal biçimde çalışmak
Fragment Yaşam Döngüsü
Fragment'lerin, Activity yaşam döngüsüyle birlikte çalışan kendi yaşam döngüleri vardır. Temel geri çağrılar şunlardır:
onAttach— fragment Activity'ye bağlanıronCreate— fragment oluşturulur (henüz görünüm yoktur)onCreateView— düzen şişirilironViewCreated— görünüm hazırdır; kullanıcı arayüzünü burada kurunonDestroyView— görünüm yok edilir (görünüm başvurularını temizleyin)onDetach— fragment ayrılır
Fragment Oluşturma
Fragment sınıfını genişleten bir sınıf oluşturun ve düzeni şişirmek için onCreateView yöntemini geçersiz kılın:
import androidx.fragment.app.Fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
class HomeFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_home, container, false)
}
}Fragment'lerde ViewBinding
Fragment'lerde ViewBinding kullanın; ancak bellek sızıntılarını önlemek için binding'i onDestroyView içinde serbest bırakın:
class HomeFragment : Fragment() {
private var _binding: FragmentHomeBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentHomeBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.tvTitle.text = "Welcome!"
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null // prevent memory leak
}
}Fragment Düzeni XML'i
Tıpkı bir Activity düzeni gibi res/layout/fragment_home.xml dosyasını oluşturun. Kök görünüm, Fragment'in görünümü olur:
<!-- res/layout/fragment_home.xml -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:text="Home" />
</LinearLayout>Activity'ye Fragment Ekleme
Bir Activity'ye Fragment eklemenin iki yolu vardır:
- Statik (XML) — düzende
<fragment>etiketiyle tanımlanır. Çalışma zamanında sabittir. - Dinamik (kod) —
FragmentManagerve işlemleri kullanır. Çalışma zamanında değiştirilebilir.
<!-- Static: in activity_main.xml -->
<fragment
android:id="@+id/homeFragment"
android:name="com.example.HomeFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />Dinamik Fragment İşlemleri
Fragment'leri çalışma zamanında eklemek, değiştirmek veya kaldırmak için supportFragmentManager kullanın:
// In Activity:
class MainActivity : AppCompatActivity(R.layout.activity_main) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.add(R.id.fragmentContainer, HomeFragment())
.commit()
}
}
fun showDetail(id: Int) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragmentContainer, DetailFragment.newInstance(id))
.addToBackStack(null) // allow back navigation
.commit()
}
}Fragment'lere Bağımsız Değişken Aktarma
Companion object fabrika kalıbını kullanarak bir Bundle üzerinden veri aktarın. Parametre alan bir Fragment oluşturucusunu hiçbir zaman kullanmayın; yapılandırma değişikliklerinden sonra Android, fragment'leri parametresiz oluşturucuyla yeniden oluşturur:
class DetailFragment : Fragment() {
companion object {
private const val ARG_ID = "item_id"
fun newInstance(itemId: Int): DetailFragment {
return DetailFragment().apply {
arguments = Bundle().apply {
putInt(ARG_ID, itemId)
}
}
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val itemId = requireArguments().getInt(ARG_ID)
// use itemId to load data
}
}Fragment → Activity İletişimi
Fragment içinde tanımlanan ve Activity tarafından uygulanan bir arayüz kullanın. Fragment, onAttach üzerinden bir başvuru alır:
class ListFragment : Fragment() {
interface OnItemSelected {
fun onItemSelected(id: Int)
}
private var listener: OnItemSelected? = null
override fun onAttach(context: Context) {
super.onAttach(context)
listener = context as? OnItemSelected
}
private fun handleClick(id: Int) {
listener?.onItemSelected(id)
}
override fun onDetach() {
super.onDetach()
listener = null
}
}Geri Yığını
Bir işlem içinde addToBackStack(null) çağırdığınızda Geri düğmesine basılması, fragment'i yığından çıkarır:
addToBackStackolmadan — Geri düğmesi Activity'den çıkaraddToBackStackile — Geri düğmesi önceki fragment'e döner- Geri gitmek için programlı olarak
popBackStack()kullanın
Bir Kapsayıcıda Fragment
Activity düzeninin yalnızca bir kapsayıcı görünüme ihtiyacı vardır; genellikle ID'si olan bir FrameLayout. Fragment bu kapsayıcıyı doldurur:
<!-- activity_main.xml -->
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />Hızlı Kontrol
Bir Fragment'e oluşturucu bağımsız değişkenleri aktarmak yerine neden bir companion fabrika aracılığıyla Bundle kullanmalısınız?
Özet: Fragment'ler
Fragment'ler, modern Android kullanıcı arayüzlerinin yapı taşlarıdır:
Fragment'i genişletin, düzenionCreateViewiçinde şişirin- Kullanıcı arayüzünü
onViewCreatediçinde kurun - ViewBinding'i
onDestroyViewiçinde serbest bırakın - Verileri
Bundle+ companion fabrika (newInstance) aracılığıyla aktarın - Geri gezinme için
addToBackStackkullanın - Activity ile bir arayüz aracılığıyla iletişim kurun
Sıradaki konu: çalışma zamanında tehlikeli izinler istemek.
Sıkça Sorulan Sorular
“Fragment'ler” dersi ücretsiz mi?
Evet — “Fragment'ler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 7 dersten oluşur.
“Fragment'ler” dersinde ne öğreneceğim?
Fragment'lerle modüler kullanıcı arayüzleri oluşturun. Fragment yaşam döngüsünü, fragment'lerde ViewBinding kullanımını, bağımsız değişken aktarımını, geri yığın yönetimini ve fragment-Activity ileti… Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Android Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 7 dersinin 6. dersidir.
“Fragment'ler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Proje Yapısı ve Manifest
- Activity'ler ve Yaşam Döngüsü
- Düzenler ve Görünümler
- Kullanıcı Girdisini Ele Alma
- Intent'ler ve Gezinme
- Fragment'ler
- İzinler ve Çalışma Zamanı İstekleri