Middle
Activity'de ebeveyn bileşenden nesnelere erişimi nasıl sağlayabilirsiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Android'de, bir üst bileşenden (örneğin, fragment veya görünüm) Activity içindeki nesnelere erişim, bu nesnelere referanslar aracılığıyla sağlanır; bu referanslar çeşitli yollarla iletilir veya alınır.
Ana yöntemler:
- Activity metodlarıyla doğrudan referans alma:
findViewById()ile görünümler.findFragmentById()veyafindFragmentByTag()ile fragmentler.- Yöneticilere referanslar (örneğin,
getSupportFragmentManager(),getSystemService()).
- Oluşturma sırasında referans iletme: Ana nesne, kendisinin veya alt bileşenlerinin referansını oluştururken iletebilir (örneğin, yapıcı, fabrika metodu veya argümanlar aracılığıyla).
- Callback arayüzleri (Listener deseni): Alt bileşen, önceden tanımlanmış bir arayüzün metodlarını çağırır; bu arayüzü Activity uygular. Activity, bu çağrılara abone olur.
- Veri Bağlama (Data Binding): Verileri ve görünüm mantığını Activity/fragment ile bağlamaya olanak tanır; bu, şablon öğelerine erişim sağlar.
- ViewModel (mimari bileşen): ViewModel, hem Activity hem de onunla ilişkili bileşenler tarafından erişilebilecek verileri veya referansları içerebilir.
findViewById() ile örnek:
// Activity içinde
class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my)
val myView = findViewById<TextView>(R.id.myTextView) // Activity'deki görünüm referansı
myView.text = "Activity'den erişilebilir"
}
}
Callback arayüzü ile örnek:
// Etkileşim için arayüz
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 arayüzü uygular ve callback olur
}
}
fun doSomething() {
val result = "Fragment'ten bazı veriler"
callbacks?.onSomethingHappen(result) // Activity metodunu çağırır
}
}
// Arayüzü uygulayan Activity
class MyActivity : AppCompatActivity(), MyCallbacks {
override fun onSomethingHappen(data: String) {
// Fragment'ten alınan veriler
Log.d("MyActivity", "Fragment'ten alınan veriler: $data")
}
}