1. 重寫FragmentFactory
class MyFragmentFactory( private val dataTestString: String ): FragmentFactory() { override fun instantiate( classLoader: ClassLoader, className: String ): Fragment = when(loadFragmentClass(classLoader, className)) { TestFragment3::class.java -> { TestFragment3(dataTestString) } else -> { super.instantiate(classLoader, className) } } }
2. 建立Fragment
class TestFragment3( private val dataTestString: String ): Fragment() { private var _binding: FragmentTest3Binding? = null private val binding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentTest3Binding.inflate( layoutInflater, container, false ) return binding.root } override fun onViewCreated( view: View, savedInstanceState: Bundle? ) { super.onViewCreated(view, savedInstanceState) println("onViewCreated ${javaClass.simpleName}, " + "dataTestString $dataTestString") } }
3. 在Activity中使用
建立Fragment後,會打印onViewCreated TestFragment3, dataTestString 123
這樣就成功把自定義constructor帶進去了
override fun onCreate(savedInstanceState: Bundle?) { //必須在Activity onCreate前設定 supportFragmentManager.fragmentFactory = MyFragmentFactory("123") super.onCreate(savedInstanceState) binding = ActivityOverrideFragmentFactoryBinding .inflate(layoutInflater) setContentView(binding.root) supportFragmentManager.commit { setReorderingAllowed(true) add<TestFragment3>( R.id.fragment_container_view ) } }
相關文章
Android Fragment建立、更換、尋找、Back Stack | Android Fragment add與replace分析 |
1. 使用XML在Activity與Fragment連接 2. 使用程式方式在Activity與Fragment連接 3. 將已新增的Fragment更換 4. 尋找已建立的Fragment 5. Fragment對應的FragmentManager 6. Back Stack使用 | |
Android Fragment show、hide、attach、detach用法 | Android Fragment Transitions動畫效果 |
1. 範例程式 2. Fragment show與hide是什麼呢? 3. Fragment attach與detach是什麼呢? | 1. 範例程式 2. 功能介紹 |
Android Fragment shared element transitions動畫效果 | Android Fragment lifecycle |
1. 範例程式 2. 功能介紹 | 1. 簡略 2. 測試搭配setMaxLifecycle的生命週期 |
Android Fragment通訊 | |
1. 簡要 2. 使用View Model共享數據 3. 使用 Fragment Result API獲取結果 |
訂閱Codeilin的旅程,若有最新消息會通知。
廣告