带有viewpager2 android的导航图
Posted
技术标签:
【中文标题】带有viewpager2 android的导航图【英文标题】:Navigation graph with viewpager2 android 【发布时间】:2022-01-21 08:53:14 【问题描述】:我的 viewpager 由 2 个片段组成,它们显示正确且工作正常。
从 viewpager 的片段我想通过导航图移动到另一个片段
这是我的图表
<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/offer_nav_graph"
app:startDestination="@id/offersFragment">
<fragment
android:id="@+id/offersFragment"
android:name="com.octave.offers.OffersFragment"
android:label="offers_fragment"
tools:layout="@layout/offers_fragment" />
<fragment
android:id="@+id/availableOfferDetailFragment"
android:name="com.octave.offers.available.AvailableOfferDetailFragment"
android:label="fragment_available_offer_detail"
tools:layout="@layout/fragment_available_offer_detail" />
<fragment
android:id="@+id/availableOffersFragment"
android:name="com.octave.offers.available.AvailableOffersFragment"
android:label="fragment_available_offers"
tools:layout="@layout/fragment_available_offers" >
<action
android:id="@+id/action_availableOffersFragment_to_availableOfferDetailFragment"
app:destination="@id/availableOfferDetailFragment" >
<argument
android:name="offerId"
app:argType="integer"
android:defaultValue="-1" />
</action>
</fragment>
</navigation>
提供片段 - 有视图寻呼机 可用的报价片段 - 查看寻呼机上的片段之一 可用的报价详细信息片段 - 我要导航
点击按钮我正在调用它
AvailableOffersFragmentDirections.actionAvailableOffersFragmentToAvailableOfferDetailFragment(offerId)
例外
Navigation action/destination com.octave.staging:id/action_availableOffersFragment_to_availableOfferDetailFragment cannot be found from the current destination Destination(com.octave.staging:id/homeFragment) label=HomeFragment class=com.octave.home.HomeFragment
这里怎么了?
【问题讨论】:
您想从availableOffersFragment
导航到availableOfferDetailFragment
还是从offersFragment
.. 即按钮存在哪个片段?
@Zain 按钮存在于 availableOffersFragment 上。我想从 availableOffersFragment 导航到 availableOfferDetailFragment。 offerFragment 的 viewpager 有 2 个选项卡,它们有自己的片段 - availableOffersFragment 和 secondFragemnt
【参考方案1】:
按钮存在于 availableOffersFragment 上。我想从 availableOffersFragment 到 availableOfferDetailFragment。 offerFragment 的 viewpager 有 2 个标签,它们有自己的片段 availableOffersFragment 和 secondFragemnt
所以,现在您需要从 availableOffersFragment
导航,这是 ViewPager 中的一个选项卡(页面片段);但这是不可能的,因为这些选项卡不会影响后堆栈。您可以查看here 和this one. 中讨论的问题
但是您可以做的是将 offerFragment(包含 ViewPager)中的操作添加到 availableOfferDetailFragment,如下所示:
从 navGraph(availableOffersFragment
和 secondFragemnt
)中删除选项卡片段。
在 navGraph 中创建一个从 offerFragment 到 availableOfferDetailFragment 的操作
<fragment
android:id="@+id/offersFragment"
android:name="com.octave.offers.OffersFragment"
android:label="offers_fragment"
tools:layout="@layout/offers_fragment">
<action
android:id="@+id/action_offersFragment_to_availableOfferDetailFragment"
app:destination="@id/availableOfferDetailFragment" >
<argument
android:name="offerId"
app:argType="integer"
android:defaultValue="-1" />
</action>
</fragment>
单击按钮时,使用parentFragment
在单击按钮时从availableOffersFragment
选项卡访问offersFragment
。例如:
在offersFragment
中创建一个方法:
goToDetailsFragment(offerId: Int)
// perfrom the navaigation
OffersFragmentDirections.actionOffersFragmentToAvailableOfferDetailFragment(offerId)
在availableOffersFragment
btn.setOnClickListener
(parentFragment as offersFragment).goToDetailsFragment(offerId)
【讨论】:
你能检查一下这个issue 你检查问题了吗? 是的让我知道是否可以回答,请给我一些时间 @vivekmodi 原谅我对 paging3 库的工作不多 感谢您的时间@Zain【参考方案2】:检查使用:
btn.setOnClickListener
Navigation.findNavController(it).navigate(R.id.availableOfferDetailFragment)
【讨论】:
以上是关于带有viewpager2 android的导航图的主要内容,如果未能解决你的问题,请参考以下文章
如何使用导航抽屉和viewpager/viewpager2在java中制作android应用程序