【问题标题】:How to pass fragment layout inside BaseFragment()如何在 BaseFragment() 中传递片段布局
【发布时间】:2020-11-02 16:07:44
【问题描述】:

我有一个从 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)
    }
...

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

/**
     * 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(...) { ... }

谢谢!

【问题讨论】:

    标签: android kotlin android-fragments fragment


    【解决方案1】:

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

    open class BaseFragment(@LayoutRes contentLayoutId : Int = 0) : Fragment(contentLayoutId) {
    
        /// your class body
    
    }
    

    【讨论】:

    • 如果我不通过,layoutres 会像往常一样正常工作,还是会一直将 contentLayoutId 传递为 0?
    • @CoffeeBreak 如果你不通过 layoutres 它使用 0 什么都不做。其他解决方案是省略主构造函数并声明两个辅助构造函数显式调用每个超级片段构造函数。
    • 谢谢!另外,您知道如何处理吗? stackoverflow.com/questions/64650150/…
    猜你喜欢
    • 2022-11-11
    • 2015-12-21
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2014-09-18
    相关资源
    最近更新 更多