Sobes.tech
Junior

Jak přenést data z jedné aktivity do druhé v Androidu?

sobes.tech AI

Odpověď od AI

Data lze přenášet pomocí Intent:

  1. V výchozí Activity: Umístěte data do Extras Intent pomocí metod jako putExtra(String key, value).

    // Příprava Intent
    val intent = Intent(this, TargetActivity::class.java)
    // Přidání dat
    intent.putExtra("myString", "Ahoj z první Activity")
    intent.putExtra("myInt", 123)
    intent.putExtra("myBool", true)
    // Objekty implementující Parcelable nebo Serializable lze také předat
    // intent.putExtra("myObject", myParcelableObject)
    
    // Spuštění nové Activity
    startActivity(intent)
    
  2. V cílové Activity: Získejte data z Extras Intent, který je obdržen v metodě onCreate nebo onNewIntent.

    // V onCreate() cílové Activity
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_target)
    
        // Získání Intentu, který spustil tuto Activity
        val intent = intent
    
        // Vytažení dat podle klíče
        val myString = intent.getStringExtra("myString")
        val myInt = intent.getIntExtra("myInt", 0) // Druhý argument je výchozí hodnota
        val myBool = intent.getBooleanExtra("myBool", false)
    
        // Zpracování extrahovaných dat
        println("Přijatý řetězec: $myString")
        println("Přijaté číslo: $myInt")
        println("Přijaté boolean: $myBool")
    
        // Pro objekty Parcelable nebo Serializable
        // val myObject = intent.getParcelableExtra<MyParcelableClass>("myObject")
    }
    

Další metody přenosu dat, vhodné pro složitější scénáře nebo velké objemy dat:

  • ViewModel sdílený mezi Fragmenty/Activities (přes SharedViewModel): Vhodné pro společná data mezi souvisejícími komponentami.
  • Bundle (uvnitř Extras Intent): putExtra ve skutečnosti používá interně Bundle.
  • Statické proměnné/singletony: Je třeba je používat opatrně, mohou vést k únikům paměti a problémům se stavem.
  • Databáze/SharedPreferences: Pro trvalé ukládání nebo přenos dat, která je třeba zachovat.
  • Event Bus (například EventBus, RxJava): Pro přenos událostí nebo dat mezi komponentami asynchronně.
  • File I/O: Uložení do souboru a čtení ze souboru.