导航图与视图页2安卓



我的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上。我想从 可用报价片段到可用报价详细信息片段。 offersFragment 有一个带有 2 个选项卡的视图页,它们有自己的片段 可用报价片段和第二弗拉格蒙特

因此,现在您需要从 ViewPager 中的选项卡(页面片段)availableOffersFragment导航;但这是不可能的,因为这些选项卡不会影响后退堆栈。您可以查看此处和本文中讨论的问题。

但是,您可以做的是将 offersFragment(保存 ViewPager)中的操作添加到 availableOfferDetailFragment,如下所示:

  • 从导航图中删除选项卡片段(availableOffersFragmentsecondFragemnt)。
  • 在导航图中创建一个从 offersFragment 到 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>
单击按钮时,
  • 单击按钮时,使用parentFragmentavailableOffersFragment选项卡访问offersFragment。例如:

offersFragment中创建一个方法:

goToDetailsFragment(offerId: Int) {
// perfrom the navaigation
OffersFragmentDirections.actionOffersFragmentToAvailableOfferDetailFragment(offerId)
}

而在availableOffersFragment

btn.setOnClickListener {
(parentFragment as offersFragment).goToDetailsFragment(offerId)
}

使用以下命令进行检查:

btn.setOnClickListener {
Navigation.findNavController(it).navigate(R.id.availableOfferDetailFragment)
}

最新更新