Middle
გთხოვთ, ჩამოთვალოთ ყველა მეთოდი მონაცემების გადაცემისთვის ფრაგმენტებს შორის.
sobes.tech AI
პასუხი AI-სგან
-
ბანდლის არგუმენტები: ყველაზე გავრცელებული მეთოდი. მონაცემები გადაეცემა ბანდლის სახით
setArguments()მეთოდით ფრაგმენტში.// გამგზავრ ფრაგმენტში val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... გადასვლა TargetFragment-ზე // მიმღებ ფრაგმენტში override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... ვიყენებთ მნიშვნელობას } -
Shared ViewModel: გამოიყენება მონაცემების გადაცემისთვის, რომლებიც დაკავშირებულია აქტივობის ან რამდენიმე ფრაგმენტის ციკლთან.
// ViewModel-ში class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // ორივე ფრაგმენტში private val sharedViewModel: SharedViewModel by activityViewModels() // გამგზავრ ფრაგმენტში sharedViewModel.data.value = "გადაცემული მონაცემები" // მიმღებ ფრაგმენტში sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... ვიყენებთ მონაცემებს } -
კოლბექის ინტერფეისები: ფრაგმენტი შეიძლება განსაზღვროს ინტერფეისი, რომელიც აქტივობა ახორციელებს. ფრაგმენტი იძახის ამ ინტერფეისის მეთოდებს, გადმოსცემს მონაცემებს აქტივობას, რომელიც შემდეგ შეიძლება გადასცეს სხვა ფრაგმენტს.
// ინტერფეისი გამგზავრ ფრაგმენტში interface OnDataPass { fun onDataPass(data: String) } // გამგზავრ ფრაგმენტში private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context უნდა განახორციელოს OnDataPass") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // აქტივობა class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // განიხილება, რომ არსებობს updateData მეთოდი TargetFragment-ში } } // მიმღებ ფრაგმენტში fun updateData(data: String) { // ... UI-ს განახლება ან მონაცემების შენახვა } -
Fragment Result API: თანამედროვე მეთოდი შედეგების გადაცემისთვის ფრაგმენტებს შორის, წარმოდგენილი AndroidX Fragment-ის ვერსია 1.3.0-ში.
// გამგზავრ ფრაგმენტში setFragmentResult("requestKey", bundleOf("bundleKey" to "შედეგი")) // მიმღებ ფრაგმენტში setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... შედეგის გამოყენება }