android - 如何在 BaseFragment() 中传递 fragment 布局

标签 android kotlin android-fragments fragment

我有一个从Fragment扩展而来的BaseFragment

目前我的BaseFragment是这个

open class BaseFragment : Fragment() {

    private lateinit var onInteractionListener: OnFragmentInteractionListener

    val toolbar : Toolbar?
        get() {
            return if(activity is BaseActivity)
                (activity as BaseActivity).toolbar
            else
                null
        }

    override fun onAttach(context: Context) {
        super.onAttach(context)
        setOnInteractionListener(context)
    }
...

问题是,当我扩展这个 fragment 时,我需要像往常一样使用 onCreateView,但我想要完成的是在扩展时使用 BaseFragment(LayoutResource) 内的 fragment 布局作为可选,就像 fragment 重载方法一样

/**
     * Alternate constructor that can be used to provide a default layout
     * that will be inflated by {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}.
     *
     * @see #Fragment()
     * @see #onCreateView(LayoutInflater, ViewGroup, Bundle)
     */
    @ContentView
    public Fragment(@LayoutRes int contentLayoutId) {
        this();
        mContentLayoutId = contentLayoutId;
    }

如何在 BaseFragment 中实现此功能?所以当我扩展它时我可以做到

class A: BaseFragment(R.layout.myFragment)

class A: BaseFragment()

onCreateView(...) { ... }

谢谢!

最佳答案

只需让主构造函数将参数传递给 super 构造函数即可。提供默认值零,您也可以将其用作无参数构造函数:

open class BaseFragment(@LayoutRes contentLayoutId : Int = 0) : Fragment(contentLayoutId) {

    /// your class body

}

关于android - 如何在 BaseFragment() 中传递 fragment 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64649117/

相关文章:

android - 音频编解码器dequeueInputBuffer在设备上返回-1

Android Social Game 实现 - 数据存储和共享

kotlin - 是否可以将纯 Java 代码注入(inject) Kotlin?

android - 如何淡出 fragment 过渡中的非共享 View ?

Android MapView 使用 ViewPager 和 PageTransformer 消失

android - 以编程方式访问 MenuItem 以更改 Textcolor

android - 当输入语言 android 设备是波斯语时,从数据库或文件读取的整数或长值变成波斯数字?

java - Kotlin BigInteger 到 BigDecimal 转换

android - MaterialContainerTransform Unresolved reference

android - 如何从 Android 中的 Activity 访问自定义适配器内 fragment 的 UI 元素