Sobes.tech
Middle

გთხოვთ, ჩამოთვალოთ ყველა მეთოდი მონაცემების გადაცემისთვის ფრაგმენტებს შორის.

sobes.tech AI

პასუხი AI-სგან

  1. ბანდლის არგუმენტები: ყველაზე გავრცელებული მეთოდი. მონაცემები გადაეცემა ბანდლის სახით 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")
        // ... ვიყენებთ მნიშვნელობას
    }
    
  2. Shared ViewModel: გამოიყენება მონაცემების გადაცემისთვის, რომლებიც დაკავშირებულია აქტივობის ან რამდენიმე ფრაგმენტის ციკლთან.

    // ViewModel-ში
    class SharedViewModel : ViewModel() {
        val data = MutableLiveData<String>()
    }
    
    // ორივე ფრაგმენტში
    private val sharedViewModel: SharedViewModel by activityViewModels()
    
    // გამგზავრ ფრაგმენტში
    sharedViewModel.data.value = "გადაცემული მონაცემები"
    
    // მიმღებ ფრაგმენტში
    sharedViewModel.data.observe(viewLifecycleOwner) { data ->
        // ... ვიყენებთ მონაცემებს
    }
    
  3. კოლბექის ინტერფეისები: ფრაგმენტი შეიძლება განსაზღვროს ინტერფეისი, რომელიც აქტივობა ახორციელებს. ფრაგმენტი იძახის ამ ინტერფეისის მეთოდებს, გადმოსცემს მონაცემებს აქტივობას, რომელიც შემდეგ შეიძლება გადასცეს სხვა ფრაგმენტს.

    // ინტერფეისი გამგზავრ ფრაგმენტში
    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-ს განახლება ან მონაცემების შენახვა
    }
    
  4. Fragment Result API: თანამედროვე მეთოდი შედეგების გადაცემისთვის ფრაგმენტებს შორის, წარმოდგენილი AndroidX Fragment-ის ვერსია 1.3.0-ში.

    // გამგზავრ ფრაგმენტში
    setFragmentResult("requestKey", bundleOf("bundleKey" to "შედეგი"))
    
    // მიმღებ ფრაგმენტში
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        val result = bundle.getString("bundleKey")
        // ... შედეგის გამოყენება
    }