Android Fragment 自定義constructor

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 StackAndroid 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的旅程,若有最新消息會通知。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

WordPress.com.

向上 ↑

%d 位部落客按了讚: