代码之家  ›  专栏  ›  技术社区  ›  fanjavaid

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

  •  0
  • fanjavaid  · 技术社区  · 8 年前

    我创建接受片段的自定义视图。因此,稍后我的自定义视图将具有动态内容( 碎片 )。但我在添加片段时遇到了以下错误。

    原因:java.lang.illegalargumentException:未找到片段samplefragment 470c924 0 id=0x7f080058的ID 0x7f080058(android.amanah.com.amanah:id/flcontent)的视图

    这是我的自定义视图:

    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
        }
    }
    

    我这样称呼我的自定义视图:

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

    在自定义视图中将XML作为片段容器( 布局\下\工作表.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" />
    ...
    

    为什么我的自定义视图找不到 F含量 是吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   pistolcaffe    8 年前

    该对话框与WindowManager分开显示,因此它不包含在活动的视图层中。所以找不到你的flcontent。

    建议使用BottomSheepDialogFragment并用ChildFragmentManager替换该片段。