Junior
როგორ გადავცეთ პარამეტრები ფრაგმენტს?
sobes.tech AI
პასუხი AI-სგან
Bundle გამოიყენება გასაღები-ღირებულების წყვილების პაკეტირებისთვის.
// არგუმენტებით ფрагმენტის შექმნა
val fragment = MyFragment().apply {
arguments = Bundle().apply {
putString("key1", "value1")
putInt("key2", 123)
}
}
// ფрагმენტის გადაცემა FragmentManager-ს
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit()
პარამეტრების ამოღება ფრაგმენტში:
// onCreate ან onCreateView-ში ფრაგმენტის
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
arguments?.let {
val value1 = it.getString("key1")
val value2 = it.getInt("key2")
// მიღებული მნიშვნელობების გამოყენება
}
// ...
return inflater.inflate(R.layout.fragment_my, container, false)
}
შეფასებულია მეთოდი, რომელიც იყენებს ფაბრიკატ მეთოდს და Kotlin-ს:
// ფრაგმენტი ფაბრიკატ მეთოდით
class MyFragment : Fragment() {
// არგუმენტების მიღება
private val key1: String? by lazy { arguments?.getString("key1") }
private val key2: Int by lazy { arguments?.getInt("key2", 0) ?: 0 } // დეფოლტ მნიშვნელობა
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// მიღებული მნიშვნელობების გამოყენება
val text = "მნიშვნელობა 1: $key1, მნიშვნელობა 2: $key2"
// ...
return inflater.inflate(R.layout.fragment_my, container, false)
}
companion object {
// ფაბრიკატ მეთოდი
@JvmStatic // Java-დან გამოძახებისთვის
fun newInstance(param1: String, param2: Int): MyFragment {
return MyFragment().apply {
arguments = Bundle().apply {
putString("key1", param1)
putInt("key2", param2)
}
}
}
}
}
ფაბრიკატ მეთოდის გამოყენება:
// ფრაგმენტის შექმნა ფაბრიკატ მეთოდით
val fragment = MyFragment.newInstance("ახალი მნიშვნელობა", 456)
// ფრაგმენტის გადაცემა FragmentManager-ს
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit()