Sobes.tech
Middle

Activity-də valideyn komponentdən obyektlərə çıxışı necə təmin etmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Android-də, valideyn komponentindən (məsələn, fragment və ya görünüm) Activity-də obyektlərə əlçatanlıq bu obyektlərə istinadlar vasitəsilə təmin edilir; bu istinadlar müxtəlif yollarla ötürülür və ya alınır.

Əsas üsullar:

  • Activity metodları ilə birbaşa istinadın alınması:
    • findViewById() görünüşlər üçün.
    • findFragmentById() və ya findFragmentByTag() fragmentlər üçün.
    • İdarəedicilərə istinadlar (məsələn, getSupportFragmentManager(), getSystemService()).
  • Yaradılarkən istinadın ötürülməsi: Valideyn obyekt özünü və ya onun uşaqlarını yaradarkən istinadını ötürə bilər (məsələn, konstruktor, fabrik metodu və ya arqumentlər vasitəsilə).
  • Callback interfeysləri (Listener nümunəsi): Uşaq komponenti əvvəlcədən müəyyən edilmiş interfeys metodlarını çağırır; bu metodlar Activity tərəfindən həyata keçirilir. Activity bu çağırışlara abunə olur.
  • Məlumatların bağlanması (Data Binding): Məlumatların və görünüşün məntiqinin Activity/fragment ilə əlaqələndirilməsinə imkan verir, layout elementlərinə giriş təmin edir.
  • ViewModel (arxitektura komponenti): ViewModel məlumatlar və ya istinadlar saxlaya bilər ki, bunlar həm Activity, həm də ona bağlı komponentlər üçün əlçatan olsun.

findViewById() nümunəsi:

// Activity-də
class MyActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_my)

        val myView = findViewById<TextView>(R.id.myTextView) // Activity-də görünüşə istinad
        myView.text = "Activity-dən əlçatan"
    }
}

Callback interfeysi nümunəsi:

// Əlaqə üçün interfeys
interface MyCallbacks {
    fun onSomethingHappen(data: String)
}

// Callback çağıran fragment
class MyFragment : Fragment() {
    private var callbacks: MyCallbacks? = null

    override fun onAttach(context: Context) {
        super.onAttach(context)
        if (context is MyCallbacks) {
            callbacks = context // Activity interfeysi həyata keçirir və callback olur
        }
    }

    fun doSomething() {
        val result = "Fragmentdən bəzi məlumatlar"
        callbacks?.onSomethingHappen(result) // Activity metodunu çağırır
    }
}

// Interfeysi həyata keçirən Activity
class MyActivity : AppCompatActivity(), MyCallbacks {
    override fun onSomethingHappen(data: String) {
        // Fragmentdən alınan məlumatlar
        Log.d("MyActivity", "Fragmentdən alınan məlumatlar: $data")
    }
}