【问题标题】:Navigation Component - findNavController from ViewPager fragment not work导航组件 - ViewPager 片段中的 findNavController 不起作用
【发布时间】:2020-01-21 13:43:54
【问题描述】:

我有一个带有 3 个菜单选项(主页、服务和更多)的底部导航。 主页选项卡片段包含 TabLayout 和 ViewPager。

ViewPager 有 2 个片段 - CurrentDetailFargment 和 PreviousDetailFragment。

ViewPager 有效,之后当我使用 findNavController() 应用单击 CurrentDetailFargment 的按钮时,我得到了异常。

Reference

导航支付屏幕

findNavController().
navigate(R.id.action_currentBillFragment_to_paymentOptionsFragment)

例外

java.lang.IllegalArgumentException: navigation destination XXXXXXX:id/action_currentBillFragment_to_paymentOptionsFragment is unknown to this NavController
    at androidx.navigation.NavController.navigate(NavController.java:789)
    at androidx.navigation.NavController.navigate(NavController.java:730)
    at androidx.navigation.NavController.navigate(NavController.java:716)
    at androidx.navigation.NavController.navigate(NavController.java:704)
    at com.bses_yamuna.user.home.currentbill.view.CurrentBillFragment.navigateToPayNow

根据例外情况 - 我没有在图表中提及“action_currentBillFragment_to_paymentOptionsFragment”ID。但我已经宣布它是图表。此图与 BottomNaviagtion 一起使用。

请让我知道我解决了这个问题。

活动布局部分-

    <fragment
        android:id="@+id/navigationHost"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@+id/bottomNavigation"
        app:layout_constraintTop_toBottomOf="@+id/constraint_top"
        app:navGraph="@navigation/menu_navigation" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottomNavigation"
        style="@style/Widget.BottomNavigationView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?android:attr/windowBackground"
        app:itemIconTint="@drawable/bottom_navigation_item_colors"
        app:itemTextColor="@drawable/bottom_navigation_item_colors"
        app:labelVisibilityMode="labeled"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu_modify" />

适配器

 class ViewPagerAdapter (fragmentManager:FragmentManager, private val titleList: ArrayList<String>): FragmentStatePagerAdapter(fragmentManager,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT ) {

override fun getItem(position: Int): Fragment {
    return if(position==0)
        CurrentBillFragment()
    else
        PreviousBillFragment()

}

override fun getCount(): Int {
   return titleList.size
}

override fun getPageTitle(position: Int): CharSequence? {
    return titleList[position]
}
override fun getItemPosition(value: Any): Int {
    return PagerAdapter.POSITION_NONE
}

}

在 ViewPager 上设置适配器-

private fun setupViewPager() {
    val titles = ArrayList<String>()
    titles.add(getString(R.string.current_bill_detail))
    titles.add(getString(R.string.previous_bill_detail))
    val adapter = ViewPagerAdapter(childFragmentManager, titles)
    mBinding.tabLayout.setupWithViewPager( mBinding.pager)
    mBinding.pager.adapter = adapter

}

menu_navigation.xml-

   <fragment
    android:id="@+id/currentBillFragment"
    android:name="XXXXX.view.CurrentDetailFargment "
    tools:layout="@layout/fragment_current_bill">

    <action          
  android:id=
  "@+id/action_currentBillFragment_to_currentBillSummaryFragment"
        app:destination="@+id/currentBillSummaryFragment" />

</fragment>
<fragment
    android:id="@+id/paymentOptionsFragment"
    android:name="XXXXX.view.PaymentOptionsFragment"
    tools:layout="@layout/fragment_payment_option"/>

【问题讨论】:

  • 你解决了这个@mukesh

标签: android navigation


【解决方案1】:

Action 应该在包含 ViewPager 和 TabLayout 的片段中定义。

我在 ViewPager 和 TabLayout 的宿主片段中移动了操作“action_currentBillFragment_to_currentBillSummaryFragment”。

【讨论】:

  • 是的,它有效,但实际上,我认为这是正确的方式吗...有时我认为在这种情况下直接通过 ID 导航可能会更好,因为它可能会令人困惑
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多