【发布时间】:2022-01-21 00:52:13
【问题描述】:
我想导航到DetailsFragment单击列表项(book_item.xml)
book_item.xml
<LinearLayout
...
onBooksClickListener="@{result}">
...
</LinearLayout>
现在它适用于 片段(全屏)
我想让它覆盖片段所以想把它转换成对话框片段
片段
的工作代码片段类
class DetailsFragment : Fragment() {
private val args by navArgs<DetailsFragmentArgs>()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_details, container, false)
}
}
RowBinding 类
class BooksRowBinding {
companion object {
@ExperimentalCoroutinesApi
@BindingAdapter("onBooksClickListener")
@JvmStatic
fun onBooksClickListener(linearLayout: LinearLayout, result: Result){
linearLayout.setOnClickListener{
try {
val action = BooksListFragmentDirections.actionBooksListFragmentToDetailsFragment(result)
linearLayout.findNavController().navigate(action)
}catch (e: Exception){
Log.d("OnBooksClickListener",e.toString())
}
}
}
要将其转换为 DailogFragment,我尝试使用 google android 文档,但没有说明如何从 Fragment 类外部打开 dialogFragment
DialogFragment
的代码损坏片段类
class DetailsFragment : DailogFragment() {
private val args by navArgs<DetailsFragmentArgs>()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_details, container, false)
}
}
RowBinding 类
class BooksRowBinding {
companion object {
@ExperimentalCoroutinesApi
@BindingAdapter("onBooksClickListener")
@JvmStatic
fun onBooksClickListener(linearLayout: LinearLayout, result: Result){
linearLayout.setOnClickListener{
try {
DetailsFragment().show(childFragmentManager,DetailsFragment.TAG)
/****************ERROR *******************
this works only if you call this from within the
onCreateMethod of the Fragment
******************************************/
}catch (e: Exception){
Log.d("OnBooksClickListener",e.toString())
}
}
}
现在我遇到错误:Unresolved reference: childFragmentManager
my_nav.xml
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/my_nav"
app:startDestination="@id/booksListFragment">
<fragment
android:id="@+id/booksListFragment"
android:name="we.are.suvikranth.ui.BooksListFragment"
android:label="Suvikranth"
tools:layout="@layout/fragment_books_list">
<action
android:id="@+id/action_booksListFragment_to_detailsFragment"
app:destination="@id/detailsFragment" />
</fragment>
<fragment
android:id="@+id/detailsFragment"
android:name="we.are.suvikranth.ui.DetailsFragment"
android:label="Books Details"
tools:layout="@layout/fragment_details" >
<argument
android:name="result"
app:argType="we.are.suvikranth.models.Result" />
</fragment>
</navigation>
【问题讨论】:
-
如果您使用的是 Navigation,则不应直接自己创建 DialogFragment。您没有使用dialog destination 有什么原因吗?
-
@ianhanniballake 感谢您的回复,因为谷歌文档中没有提供 developer.android.com/guide/fragments/dialogs
-
@ianhanniballake 谢谢你。我之前在做完整片段时使用了导航图(对话目的地)。我重用了它并将 nav.xml Fragment 组件更改为对话框组件
标签: android android-fragments android-dialogfragment android-navigation dialogfragment