简体   繁体   English

在自定义视图中找不到片段的ID(...)的视图

[英]No view found for id (…) for fragment inside Custom View

i create custom view that accept fragment. 我创建接受片段的自定义视图。 So, later my custom view have dynamic content ( Fragment ). 因此,以后我的自定义视图具有动态内容( Fragment )。 But i got this following error when adding fragment. 但是添加片段时出现以下错误。

Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f080058 (android.amanah.com.amanah:id/flContent) for fragment SampleFragment{470c924 #0 id=0x7f080058} 原因:java.lang.IllegalArgumentException:找不到片段SampleFragment {470c924#0 id = 0x7f080058}的ID 0x7f080058(android.amanah.com.amanah:id / flContent)的视图

Here is my custom view : 这是我的自定义视图:

class AmBottomSheet(context: Context, attributeSet: AttributeSet?) : ConstraintLayout(context, attributeSet) {
    private val state = State()

    init {
        LayoutInflater.from(context)
                .inflate(R.layout.layout_bottom_sheet, this, true)
    }

    fun bind(newState: State.() -> Unit) {
        state.apply(newState)
        render(state)
    }

    private fun render(state: State) {
        tvTitle.text = state.title
        if (state.subTitle != null) {
            tvSubTitle.text = state.subTitle
        } else {
            tvSubTitle.visibility = GONE
        }

        ivClose.setOnClickListener {
            state.closeClickListener?.invoke(it)
        }

        attachContentFragment()
    }

    private fun attachContentFragment() {
        val transaction = state.supportFragmentManager?.beginTransaction()
        transaction?.replace(R.id.flContent, state.layoutContent)
        transaction?.commit()
    }

    class State {
        var title: String? = null
        var subTitle: String? = null
        var closeClickListener: (View?.() -> Unit)? = null
        var supportFragmentManager: FragmentManager? = null
        var layoutContent: Fragment? = null
    }
}

I call my custom view like this : 我这样称呼我的自定义视图:

...
bottomSheetView.bind {
            title = "Informasi"
            subTitle = "We can even add some listeners to the BottomSheet and for example do something when the dialog is dismissed"
            closeClickListener = {
                bottomSheetDialog.dismiss()
            }
            supportFragmentManager = getSupportFragmentManager()
            layoutContent = SampleFragment.newInstance()
        }
...

And my xml as fragment container in my custom view ( layout_bottom_sheet.xml ) layout like this : 和我的XML作为片段容器在我的自定义视图( layout_bottom_sheet.xml )布局中,如下所示:

...
<FrameLayout
        android:id="@+id/flContent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/standard_margin_x2"
        android:background="@color/colorSlate"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tvSubTitle"
        app:layout_constraintVertical_bias="0.0" />
...

Why my custom view cannot find flContent ? 为什么我的自定义视图找不到flContent

The Dialog is displayed separately from the windowmanager, so it is not included in the view layer of the activity. 对话框与窗口管理器分开显示,因此该对话框未包含在活动的视图层中。 So can't find your flContent. 因此找不到您的flContent。

It is recommended that you use BottomSheepDialogFragment and replace the fragment with the childFragmentManager. 建议您使用BottomSheepDialogFragment并将片段替换为childFragmentManager。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM