Sobes.tech
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()