Sobes.tech
Junior

Bir Activity-dən digərinə məlumatları necə keçirmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Məlumatların ötürülmə üsulləri:

  1. Intent Extras: Ən yaygın üsul. Məlumatlar açar-dəyər cütləri şəklində Intent-ə əlavə olunur.
// Göndərən Activity-də
Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra("key_string", "Salam!");
intent.putExtra("key_int", 42);
intent.putExtra("key_boolean", true);
startActivity(intent);
// Qəbul edən Activity-də
Bundle extras = getIntent().getExtras();
if (extras != null) {
    String stringData = extras.getString("key_string");
    int intData = extras.getInt("key_int");
    boolean booleanData = extras.getBoolean("key_boolean", false); // Default dəyər ilə
}

Dəstək olunan növlər: primitivlər, String, Bundle, Parcelable, Serializable. Çətin obyektlər üçün Parcelable üstün tutulur.

  1. ViewModel (LiveData və ya Channel ilə birlikdə): Daha mürəkkəb ssenarilər üçün uyğundur, burada məlumatlar ekranın döndürülməsi zamanı saxlanmalı və ya bir neçə komponent tərəfindən istifadə olunmalıdır. DataFlow MutableLiveData və ya Channel vasitəsilə həyata keçirilə bilər.
// Ümumi ViewModel-də (məsələn, host Activity və fragmentlər üçün)
private val _data = MutableLiveData<MyData>()
val data: LiveData<MyData> = _data

fun setData(newData: MyData) {
    _data.value = newData
}
// Göndərən Activity/Fragment-də
viewModel.setData(MyData(...))
// Qəbul edən Activity/Fragment-də ViewModel-i müşahidə etmək
viewModel.data.observe(viewLifecycleOwner) { data ->
    // Məlumatlardan istifadə
}
  1. Geri çağırış / İnterfeys (Activity-ni nəticə üçün başlatmaq): Qəbul edən Activity-nin göndərən Activity-ə nəticə qaytarması lazım olduqda istifadə olunur.
// Göndərən Activity-də
ActivityResultLauncher<Intent> someActivityResultLauncher = registerForActivityResult(
    new ActivityResultContracts.StartActivityForResult(),
    result -> {
        if (result.getResultCode() == Activity.RESULT_OK) {
            Intent data = result.getData();
            if (data != null && data.getExtras() != null) {
                String resultData = data.getExtras().getString("result_key");
            }
        }
    });

// Nəticə üçün Activity-ni başlat
Intent intent = new Intent(this, TargetActivity.class);
someActivityResultLauncher.launch(intent);
// Qəbul edən Activity-də
Intent resultIntent = new Intent();
resultIntent.putExtra("result_key", "Nəticə");
setResult(Activity.RESULT_OK, resultIntent);
finish();
  1. Yerli verilənlər bazası / Shared Preferences / Daxili yaddaş: Böyük həcmdə məlumatların ötürülməsi və ya saxlanması üçün. Məlumatlar bir Activity-də yazılır və digərində oxunur.
// Yazma (Shared Preferences nümunəsi)
SharedPreferences sharedPref = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("saved_data", "Məlumatlar saxlanıldı");
editor.apply();
// Oxuma (Shared Preferences nümunəsi)
SharedPreferences sharedPref = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
String savedData = sharedPref.getString("saved_data", null);

Bu yanaşma məlumatların həyat dövrünü idarə etmək üçün əlavə loqika tələb edir (nə zaman silinməlidir).

  1. Singleton / Qlobal statik obyekt: Tövsiyə edilmir çünki yaddaş sızmalarına və arxitektura pozuntularına səbəb ola bilər. Yalnız çox sərt və sadə hallarda istifadə olunmalıdır.

    // Singleton sinfi
    public class DataHolder {
        private static final DataHolder instance = new DataHolder();
        private String data;
    
        private DataHolder() {}
    
        public static DataHolder getInstance() {
            return instance;
        }
    
        public String getData() {
            return data;
        }
    
        public void setData(String data) {
            this.data = data;
        }
    }
    
    // Göndərən Activity-də
    DataHolder.getInstance().setData("Singleton vasitəsilə məlumat");
    
    // Qəbul edən Activity-də
    String data = DataHolder.getInstance().getData();
    

Metod seçimi məlumatların həcmi, mürəkkəbliyi, saxlanma ehtiyacı və Activity-lər arasındakı qarşılıqlı əlaqəyə bağlıdır. Ən çox istifadə olunan və tövsiyə olunan üsullar Intent Extras və ViewModel-dir.