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ə yafindFragmentByTag()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")
}
}