Sobes.tech
Junior

Jak przekazać dane z jednej aktywności do drugiej w Androidzie?

sobes.tech AI

Odpowiedź od AI

Dane można przesłać za pomocą Intent:

  1. W aktywności źródłowej: Umieść dane w Extras Intent za pomocą metod takich jak putExtra(String key, value).

    // Przygotowanie Intent
    val intent = Intent(this, TargetActivity::class.java)
    // Dodanie danych
    intent.putExtra("myString", "Cześć z pierwszej Activity")
    intent.putExtra("myInt", 123)
    intent.putExtra("myBool", true)
    // Możesz przesłać obiekty implementujące Parcelable lub Serializable
    // intent.putExtra("myObject", myParcelableObject)
    
    // Uruchomienie nowej Activity
    startActivity(intent)
    
  2. W docelowej Activity: Wyodrębnij dane z Extras Intent, otrzymanego w metodzie onCreate lub onNewIntent.

    // W onCreate() docelowej Activity
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_target)
    
        // Uzyskanie Intent, który uruchomił tę Activity
        val intent = intent
    
        // Wyodrębnianie danych po kluczu
        val myString = intent.getStringExtra("myString")
        val myInt = intent.getIntExtra("myInt", 0) // Drugi argument to wartość domyślna
        val myBool = intent.getBooleanExtra("myBool", false)
    
        // Przetwarzanie wyodrębnionych danych
        println("Odebrany ciąg: $myString")
        println("Odebrana liczba: $myInt")
        println("Odebrany boolean: $myBool")
    
        // Dla obiektów Parcelable lub Serializable
        // val myObject = intent.getParcelableExtra<MyParcelableClass>("myObject")
    }
    

Inne metody przesyłania danych, odpowiednie dla bardziej złożonych scenariuszy lub dużych ilości danych:

  • ViewModel współdzielony między Fragmentami/Activities (przez SharedViewModel): Przydatne do wspólnych danych między powiązanymi komponentami.
  • Bundle (wewnątrz Extras Intent): putExtra w rzeczywistości używa Bundle wewnętrznie.
  • Zmienne statyczne/singletony: Należy używać ostrożnie, mogą prowadzić do wycieków pamięci i problemów ze stanem.
  • Baza danych/SharedPreferences: Do trwałego przechowywania lub przesyłania danych, które muszą być zachowane.
  • Event Bus (np. EventBus, RxJava): Do przesyłania zdarzeń lub danych między komponentami w trybie asynchronicznym.
  • File I/O: Zapisywanie do pliku i odczyt z niego.