Middle
Նշեք տվյալների փոխանցման բոլոր եղանակները հատվածների միջև։
sobes.tech AI
Պատասխան AI-ից
-
Բանդլի պնդումներ: Ամենատարածված մեթոդը: Տվյալները փոխանցվում են Bundle-ով
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") // ... օգտագործում ենք value-ն } -
Shared ViewModel: Օգտագործվում է տվյալների փոխանցման համար, որոնք կապված են ակտիվության կամ մի քանի ֆրագմենտների կյանքի ցիկլի հետ:
// ViewModel-ում class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Երկու ֆրագմենտներում private val sharedViewModel: SharedViewModel by activityViewModels() // Ուղարկող ֆրագմենտում sharedViewModel.data.value = "փոխանցվող տվյալներ" // Ստացող ֆրագմենտում sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... օգտագործում ենք data-ն } -
Callback ինտերֆեյսներ: Ֆրագմենտը կարող է սահմանել ինտերֆեյս, որը իրականացնում է ակտիվությունը: Ֆրագմենտը կանչում է այդ ինտերֆեյսի մեթոդները, փոխանցելով տվյալները ակտիվությանը, որը կարող է փոխանցել դրանք մյուս ֆրագմենտին:
// Ինտերֆեյսը ուղարկող ֆրագմենտում 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") // ... օգտագործում ենք արդյունքը }