Middle
Kuidas tagada juurdepääs objektidele vanemkomponendist Activity's?
sobes.tech AI
Vastus AI-lt
Androidis on objektide kättesaadavus vanemkomponendist (näiteks fragment või vaade) tagatud nende viidetega, mis on edastatud või saadud erinevatel viisidel.
Põhiviisid:
- Otseviide kaudu Activity meetodite abil:
findViewById()vaadete jaoks.findFragmentById()võifindFragmentByTag()fragmentide jaoks.- Viited halduritele (näiteks,
getSupportFragmentManager(),getSystemService()).
- Viide edastamine loomise ajal: Vanemobjekt võib edastada viite iseendale või oma komponentidele lapsele nende loomisel (näiteks, konstruktoriga, tehase meetodiga või argumentidega).
- Callback-liidesed (Listener muster): Lapsekomponent kutsub välja eelnevalt määratletud liidese meetodid, mida realiseerib Activity. Activity registreerub nende väljakutsete jaoks.
- Andmete sidumine (Data Binding): Võimaldab siduda andmeid ja vaate loogikat Activity/fragmentiga, võimaldades juurdepääsu paigutuse elementidele.
- ViewModel (arhitektuurikomponent): ViewModel võib sisaldada andmeid või viiteid, mis on kättesaadavad nii Activity-le kui ka sellega seotud komponentidele.
Näide findViewById()-ga:
// Activity-s
class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my)
val myView = findViewById<TextView>(R.id.myTextView) // Viide vaatele Activity-s
myView.text = "Juurdepääsetav Activity-st"
}
}
Näide Callback-liidesega:
// Interaktiivse liidese
interface MyCallbacks {
fun onSomethingHappen(data: String)
}
// Fragment, mis kutsub callbacki
class MyFragment : Fragment() {
private var callbacks: MyCallbacks? = null
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is MyCallbacks) {
callbacks = context // Activity realiseerib liidese ja saab callbackiks
}
}
fun doSomething() {
val result = "Mõned andmed fragmentist"
callbacks?.onSomethingHappen(result) // Kutsub Activity meetodi
}
}
// Activity, mis realiseerib liidese
class MyActivity : AppCompatActivity(), MyCallbacks {
override fun onSomethingHappen(data: String) {
// Saadud andmed fragmentist
Log.d("MyActivity", "Saadud andmed fragmentist: $data")
}
}