【发布时间】:2018-12-17 07:05:39
【问题描述】:
这个代码: 我在其中打开bottomSheetDialogFragment,我想添加片段。
我想在 bottomsheetDialogFragment 中添加多个片段,但它会抛出
java.lang.IllegalArgumentException: 没有为 id 0x7f0a01cb 找到视图
class AddNotesBottomSheetDialog : BottomSheetDialogFragment() {
private lateinit var bottomSheetDialog: BottomSheetDialog
private lateinit var bottomSheetBehavior: BottomSheetBehavior<View>
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
Log.v(LOG_TAG, "-> onCreateDialog")
bottomSheetDialog = BottomSheetDialog(context!!)
var view = View.inflate(context, R.layout.bottom_sheet_notes, null)
bindViews(view)
bottomSheetDialog.setContentView(view)
bottomSheetBehavior = BottomSheetBehavior.from(view.parent as View)
bottomSheetBehavior.isHideable = false
bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
return bottomSheetDialog
}
private fun bindViews(view: View) {
loadAddNotesFragments()
}
override fun onStart() {
super.onStart()
Log.v(LOG_TAG, "-> onStart")
bottomSheetBehavior.isHideable = false
bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
if (!visible)
dialog.hide()
}
fun show(fragmentManager: FragmentManager) {
Log.v(LOG_TAG, "-> show")
visible = true
if (isAdded) {
Log.v(LOG_TAG, "-> Is already added")
dialog.show()
} else {
Log.v(LOG_TAG, "-> Not added")
show(fragmentManager, AddNotesBottomSheetDialog.LOG_TAG)
}
}
override fun onDestroyView() {
super.onDestroyView()
Log.v(LOG_TAG, "-> onDestroyView")
}
private fun loadAddNotesFragments() {
val createNoteFragment = CreateNoteFragment()
val ft = fragmentManager?.beginTransaction()
ft?.replace(R.id.placeHolderBottomSheet, createNoteFragment)
ft?.commit()
}
}
已解决:我尝试在 bottomSheetDialogFragment 中添加多个片段事务,但无法在 BottomSheetDialogFragment 中进行事务,这就是为什么它通过此异常。所以我在 BottomsheetDialog 中使用了 viewPager,它的工作很完美。
【问题讨论】:
-
在
Fragment、fragmentManager中是托管Activity的FragmentManager。您需要使用子FragmentManager在另一个内部交易Fragments。 -
在您的 onCreateDialog 方法中在
setContentView()之后调用loadAddNotesFragments()。 -
@JeelVankhede 它不起作用。我尝试了两种解决方案。
-
这是另一个片段中的一个片段,因此,您需要使用 getChildFragmentManager()。看看:stackoverflow.com/questions/6672066/fragment-inside-fragment
-
我需要在 bottomsheetDialogFrament 中添加片段,所以这不起作用,但我使用 viewpager 使用 getChildFragmentManager() 并且它现在可以工作了..谢谢..@Sinan Ceylan 的想法:)
标签: android android-xml bottom-sheet