Middle
Чӣ тавр дастрасӣ ба объектҳо аз компонентҳои падар дар Activity таъмин кардан мумкин аст?
sobes.tech AI
Ҷавоб аз AI
В Android, дастрасии объектҳо аз компонентҳои падар (масалан, фрагмент ё намоиш) дар Activity тавассути истинодҳо ба ин объектҳо, ки тавассути роҳҳои гуногун супорида ё гирифта шудаанд, таъмин карда мешавад.
Роҳҳои асосӣ:
- Гиредории мустақим тавассути методҳои Activity:
findViewById()барои намоишҳо.findFragmentById()ёfindFragmentByTag()барои фрагментҳо.- Истинодҳо ба мудирон (масалан,
getSupportFragmentManager(),getSystemService()).
- Пас додани истинод ҳангоми эҷод: Объекти падар метавонад истинод ба худ ё ба компонентҳои худро ҳангоми эҷод ба объекти кӯдак супорад (масалан, тавассути конструктор, усули фабрика ё аргументҳо).
- Интерфейсҳои Callback (паттерн Listener): Компоненти кӯдаки занг мезанад ба методҳои интерфейси пешакӣ муайяншуда, ки Activity иҷро мекунад. Activity ба ин зангҳо обуна мешавад.
- Васлкунии маълумот (Data Binding): Имкон медиҳад, ки маълумот ва логикаи намоиш бо Activity/фрагмент пайваст карда шаванд, бо дастрасӣ ба унсурҳои макет.
- ViewModel (компоненти меъморӣ): ViewModel метавонад маълумот ё истинодҳоро дар бар гирад, ки ҳам барои Activity ва ҳам барои компонентҳои пайвастшуда дастрасанд.
Масал бо findViewById():
// Дар Activity
class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my)
val myView = findViewById<TextView>(R.id.myTextView) // Гирифтани истинод ба намоиш дар Activity
myView.text = "Дастрас аз Activity"
}
}
Масал бо интерфейси Callback:
// Интерфейс барои муошират
interface MyCallbacks {
fun onSomethingHappen(data: String)
}
// Фрагмент, ки занг мезанад ба callback
class MyFragment : Fragment() {
private var callbacks: MyCallbacks? = null
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is MyCallbacks) {
callbacks = context // Activity интерфейсиро иҷро мекунад ва callback мешавад
}
}
fun doSomething() {
val result = "Маълумоти баъзе аз фрагмент"
callbacks?.onSomethingHappen(result) // Занг ба методи Activity
}
}
// Activity, ки интерфейсиро иҷро мекунад
class MyActivity : AppCompatActivity(), MyCallbacks {
override fun onSomethingHappen(data: String) {
// Маълумоти гирифташуда аз фрагмент
Log.d("MyActivity", "Маълумоти гирифташуда аз фрагмент: $data")
}
}