0Pricing
Android Academy · Ders

ViewModel ve LiveData

ViewModel ile yapılandırma değişikliklerinden etkilenmeden çalışın. LiveData ile tepkisel veri akışlarını sunun ve bunları Activity ile Fragment'larda gözlemleyin.

ViewModel ve LiveData, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 6 dersinin 1. 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 6 dersten oluşur.

Activity'lerle İlgili Sorun

Verileri doğrudan bir Activity içinde saklamanın iki önemli sorunu vardır:

  • Kullanıcı telefonu döndürdüğünde Activity yok edilir ve yeniden oluşturulur — tüm verileriniz kaybolur
  • Ağı onCreate içinde çağırırsanız her döndürmede veriler yeniden alınır — bu kaynak israfıdır

ViewModel her iki sorunu da çözer.

ViewModel Nedir

ViewModel, şu özelliklere sahip bir Android Architecture Component'tir:

  • Yapılandırma değişikliklerinden (döndürme, tema değişikliği) sonra varlığını sürdürür
  • Kullanıcı arayüzüyle ilgili verileri ve iş mantığını tutar
  • Yalnızca kullanıcı ekrandan kalıcı olarak ayrıldığında yok edilir

Pratik kural: Verilerin döndürmeden sonra da korunması gerekiyorsa onları bir ViewModel içine koyun.

ViewModel Oluşturma

ViewModel sınıfını genişletin ve Gradle bağımlılıklarınıza ekleyin:

// app/build.gradle:
// implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0'
// implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.7.0'

import androidx.lifecycle.ViewModel

class CounterViewModel : ViewModel() {

    var count = 0
        private set

    fun increment() {
        count++
    }

    fun reset() {
        count = 0
    }
}

Activity'de ViewModel Alma

Bir ViewModel örneği almak için ViewModelProvider (veya by viewModels() temsilcisi) kullanın:

import androidx.activity.viewModels

class CounterActivity : AppCompatActivity() {

    private lateinit var binding: ActivityCounterBinding
    // Android manages the ViewModel lifecycle — never instantiate it yourself
    private val viewModel: CounterViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityCounterBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // This shows the count is preserved after rotation!
        binding.tvCount.text = viewModel.count.toString()

        binding.btnPlus.setOnClickListener {
            viewModel.increment()
            binding.tvCount.text = viewModel.count.toString()
        }
    }
}

LiveData Nedir

LiveData, gözlemlenebilir bir veri tutucudur. Kullanıcı arayüzü LiveData değerlerini gözlemler ve değer değiştiğinde kullanıcı arayüzü otomatik olarak güncellenir.

  • Yaşam döngüsünü bilir — yalnızca etkin gözlemcileri günceller (Activity arka plandayken çökme olmaz)
  • Her zaman günceldir — yeni gözlemciler en son değeri hemen alır

ViewModel'de LiveData

MutableLiveData öğesini özel olarak kullanın (ViewModel yazabilir), LiveData olarak herkese açık şekilde sunun (kullanıcı arayüzü yalnızca gözlemleyebilir):

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class CounterViewModel : ViewModel() {

    private val _count = MutableLiveData(0)
    val count: LiveData<Int> = _count  // read-only for the UI

    fun increment() {
        _count.value = (_count.value ?: 0) + 1
    }

    fun reset() {
        _count.value = 0
    }
}

Activity'de LiveData Gözlemleme

Değişikliklere tepki vermek için .observe(lifecycleOwner) { value -> } çağrısını yapın:

class CounterActivity : AppCompatActivity() {

    private val viewModel: CounterViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // ...

        // Automatically updates TextView whenever count changes
        viewModel.count.observe(this) { count ->
            binding.tvCount.text = count.toString()
        }

        binding.btnPlus.setOnClickListener { viewModel.increment() }
        binding.btnReset.setOnClickListener { viewModel.reset() }
    }
}

LiveData ve State Flow Karşılaştırması

LiveData klasik yaklaşımdır. Modern Kotlin kodlarında bunun yerine genellikle Kotlin Coroutines içindeki StateFlow kullanılır:

  • StateFlow — eş yordam tabanlıdır, Android bağımlılığı yoktur
  • Activity içinde repeatOnLifecycle ile toplanır
  • Karmaşık durum yönetimi için daha uygundur

İkisi de iyi çalışır — LiveData ile başlamak daha kolaydır; daha büyük uygulamalarda StateFlow'u göreceksiniz.

Birden Çok Gözlemcili ViewModel

Birden çok kullanıcı arayüzü bileşeni aynı LiveData'yı gözlemleyebilir. Örneğin hem bir TextView hem de bir Button'ın etkin durumu, ViewModel'deki aynı veri değerine tepki verebilir — ViewModel'e ek bir kod yazmanız gerekmez.

Bu, sorumlulukları temiz bir şekilde ayırır: ViewModel durumu tutar, kullanıcı arayüzü yalnızca gözlemler ve görüntüler.

Hızlı Kontrol

Bir ViewModel ne zaman yok edilir?

Özet: ViewModel ve LiveData

Artık yaşam döngüsünü dikkate alan kullanıcı arayüzleri oluşturmayı biliyorsunuz:

  • ViewModel, yapılandırma değişikliklerinden (döndürme) sonra varlığını sürdürür
  • Activity içinde ViewModel almak için by viewModels() kullanın
  • MutableLiveData (özel) / LiveData (herkese açık) kalıbı
  • .observe(this) { value -> updateUI(value) } ile gözlemleyin
  • Kullanıcı arayüzü otomatik olarak güncellenir — el ile yenileme gerekmez

Sırada: Room veritabanıyla verileri kalıcı olarak saklama var.

Sıkça Sorulan Sorular

“ViewModel ve LiveData” dersi ücretsiz mi?

Evet — “ViewModel ve LiveData” 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 6 dersten oluşur.

“ViewModel ve LiveData” dersinde ne öğreneceğim?

ViewModel ile yapılandırma değişikliklerinden etkilenmeden çalışın. LiveData ile tepkisel veri akışlarını sunun ve bunları Activity ile Fragment'larda gözlemleyin. 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, 6 dersinin 1. dersidir.

“ViewModel ve LiveData” 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

  1. ViewModel ve LiveData
  2. Room Veritabanı
  3. Coroutines ve Suspend Fonksiyonları
  4. Repository Deseni
  5. Navigation Bileşeni
  6. Hilt ile Bağımlılık Enjeksiyonu
← Android Academy Sayfasına Dön