Sobes.tech
Junior

Как да прехвърлим данни от една Activity към друга в Android?

sobes.tech AI

Отговор от AI

Има няколко начина:

  1. Intent Extras: Най-често срещаният начин. Данните се опаковат в Bundle и се добавят към Intent.

    // В първата Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("ключ", "стойност"); // Примитивни типове
    intent.putExtra("обект", new MySerializableObject()); // Serializable
    startActivity(intent);
    
    // Във втората Activity
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String стойност = extras.getString("ключ");
        MySerializableObject обект = (MySerializableObject) extras.getSerializable("обект");
    }
    
  2. Parcelable обекти: Аналогично Serializable, но по-ефективен за обекти, които трябва често да се пренасят. Изисква реализиране на интерфейса Parcelable.

    // В първата Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("parcelable_обект", new MyParcelableObject());
    startActivity(intent);
    
    // Във втората Activity
    Intent intent = getIntent();
    MyParcelableObject parcelableОбект = intent.getParcelableExtra("parcelable_обект");
    
  3. Shared Preferences: Подходящ за пренасяне на малки обеми данни, които трябва да се запазват между стартиранията на приложението.

    // В първата Activity
    SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("ключ", "стойност");
    editor.apply(); // или commit()
    
    // Във втората Activity
    SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
    String стойност = preferences.getString("ключ", null); // null - стойност по подразбиране
    
  4. Статични променливи: Не се препоръчва, тъй като нарушава принципите на ООП и може да доведе до течове на памет. Използвайте с внимание и само за много прости случаи.

    // В статичен клас или друга достъпна статична променлива
    public static String staticData;
    
    // В първата Activity
    StaticDataHolder.staticData = "данни";
    
    // Във втората Activity
    String данни = StaticDataHolder.staticData;
    
  5. База данни/Файл: За големи обеми данни или данни, които трябва да са персистентни. Данните се запазват в база данни (SQLite, Room) или файл, и втората Activity ги чете.

  6. ViewModel (заедно с LiveData): В контекста на архитектурните компоненти, ViewModel е предпочитаният начин за управление на данните на UI. Данните между Activity се пренасят чрез споделен ViewModel или чрез събития на LiveData.

    // В първата Activity (Kotlin)
    val intent = Intent(this, SecondActivity::class.java).apply {
        putExtra("data_key", "data_value")
    }
    startActivity(intent)
    
    // Във втората Activity (Kotlin)
    val data = intent.getStringExtra("data_key")
    

Изборът на метод зависи от типа и обема на пренасяните данни, както и от изискванията за персистентност. Пренасянето на данни чрез Intent Extras е стандартът за малки обеми данни и при преход между Activity.