【发布时间】:2021-08-02 12:48:57
【问题描述】:
我的 viewpager2(页面:UserDataFragment)中有一个 按钮,它将用户导航到另一个屏幕(UserDataChangeEmailFragment),在那里他们可以更改密码等。我遇到的问题是此屏幕上的后退按钮不起作用(例如,当用户按下后退和/或工具栏按钮时,用户未导航回UserDataFragment)。
然后我得到的唯一错误是:SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length。
图形图片(试图从 x 导航到 y):
图形结构
UserDataHolderFragment (Holder for the ViewPager2)
|
|--UserDataFragment (First Page of the ViewPager2, here is the **Button**)
| |
| |-- UserDataChangeEmailFragment (Back button not working)
|
|
|--UserDataAddressFragment (Second Page of the ViewPager2)
图形代码(删除不必要的东西)
<navigation android:id="@+id/nav_user_data"
app:startDestination="@id/userDataHolderFragment">
<fragment
android:id="@+id/userDataHolderFragment"
android:name="com.rsb3000.app.framework.ui.view.fragment.user.loggedIn.userdata.UserDataHolderFragment"
tools:layout="@layout/fragment_user_data_holder" >
<action
android:id="@+id/action_userDataHolderFragment_to_userDataChangeEmailFragment"
app:destination="@id/userDataChangeEmailFragment" />
<action
android:id="@+id/action_userDataHolderFragment_to_userDataChangePasswordFragment"
app:destination="@id/userDataChangePasswordFragment" />
</fragment>
<fragment
android:id="@+id/userDataFragment"
android:name="com.rsb3000.app.framework.ui.view.fragment.user.loggedIn.userdata.UserDataFragment"
tools:layout="@layout/fragment_user_data">
</fragment>
<fragment
android:id="@+id/userDataAddressFragment"
android:name="com.rsb3000.app.framework.ui.view.fragment.user.loggedIn.userdata.UserDataAddressFragment"
tools:layout="@layout/fragment_user_data_address" >
</fragment>
<fragment
android:id="@+id/userDataChangeEmailFragment"
android:name="com.rsb3000.app.framework.ui.view.fragment.user.loggedIn.userdata.UserDataChangeEmailFragment"
tools:layout="@layout/fragment_user_data_change_email" />
</navigation>
UserDataHolderFragment 代码(此处为导航按钮)
@AndroidEntryPoint
class UserDataHolderFragment : Fragment(R.layout.fragment_user_data_holder) {
private val binding: FragmentUserDataHolderBinding by viewBinding(FragmentUserDataHolderBinding::bind)
val userDataViewPagerAdapter: UserDataViewPagerAdapter get() = UserDataViewPagerAdapter(SnackbarUtils(), this)
@Inject lateinit var tabLayoutHelper: TabLayoutHelper
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.headline.userStandardToolbar.setupWithNavController(findNavController(), AppBarConfiguration(findNavController().graph))
bindObjects()
bindTablayout()
}
private fun bindObjects() {
with(binding) {
lifecycleOwner = viewLifecycleOwner
vpUserData.adapter = userDataViewPagerAdapter
}
}
private fun bindTablayout() {
tabLayoutHelper.init(binding.tlUserData, binding.vpUserData) { tab, position ->
when(position) {
0 -> tab.text = requireContext().getString(R.string.fragment_user_data_holder_user_data_tab)
1 -> tab.text = requireContext().getString(R.string.fragment_user_data_holder_user_address_tab)
}
}
}
override fun onDestroyView() {
super.onDestroyView()
tabLayoutHelper.onDestroyView()
binding.vpUserData.adapter = null
}
}
用户数据片段
private fun bindBtnClicks() {
btnGoToChangeAddress.setOnClickListener {
findNavController().navigate(
UserDataHolderFragmentDirections.actionUserDataFragmentHolderToUserDataChangeEmailFragment()
)
}
}
UserDataChangeEmailFragment(后退按钮在这里不起作用)
class UserDataChangeEmailFragment : Fragment(R.layout.fragment_user_data_change_email) {
private val binding: FragmentUserDataChangeEmailBinding by viewBinding(FragmentUserDataChangeEmailBinding::bind)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.headline.userStandardToolbar.setupWithNavController(findNavController(), AppBarConfiguration(findNavController().graph))
}
}
【问题讨论】:
标签: android kotlin android-architecture-navigation android-navigation android-navigation-graph