相关疑难解决方法(0)

处理Android导航组件中的后退按钮

我想知道如何使用导航控制器正确处理系统后退按钮操作.在我的应用程序中,我有两个片段(例如片段1和片段2),我在fragment1中有一个目标为fragment2的动作.一切都很好,除了一件事 - 当用户按下fragment2中的系统后退按钮时,我想显示一个对话框(例如使用DialogFragment)来确认退出.实现此行为的最佳方法是什么?如果我app:defaultNavHost="true"在我的主机片段中使用它会自动返回忽略我的规则.此外,这个组件是什么?

在此输入图像描述

我应该使用"pop to"吗?

navigation android fragment android-jetpack

33
推荐指数
11
解决办法
3万
查看次数

使用ViewPager和TabLayout的Android Jetpack导航

对于新的应用程序,我使用Jetpack导航库来实现正确的后退导航.第一级导航是导航抽屉,如文档中所述,可以使用jetpack导航.但是ViewPager和TabLayout实现了另一个导航级别.由TabLayout切换的片段包含额外的线性导航层次结构.但是,在Jetpack Navigation中似乎不支持ViewPager/TabLayout.必须实现FragmentPagerAdapter,并在切换选项卡时结束托管后端堆栈.顶级导航与每个选项卡内的导航之间存在脱节.有没有办法让这个工作与Jetpack导航?

android android-navigation android-architecture-components android-jetpack android-architecture-navigation

19
推荐指数
2
解决办法
4454
查看次数

带有导航架构组件的ViewPager

使用viewpager进行导航有什么用?我找不到有关此信息,也无法理解该如何做。

我有一个简单的两个片段,需要放入viewpager内,如果可能的话,可以通过导航。

android android-viewpager android-architecture-components

18
推荐指数
1
解决办法
4303
查看次数

Leak Canary 使用 ViewPager2 检测 TabLayout 的内存泄漏

我按照官方文档设置了一个带有 ViewPager2 的 TabLayout。我以这种方式使用 TabLayoutMediator 将 TabLayout 与 ViewPager2 连接起来:

TabLayoutMediator(binding.tabLayout, binding.viewPager) { tab, position ->
        tab.setIcon(getTabIcon(position))
        tab.text = getTabTitle(position)
    }.attach()
Run Code Online (Sandbox Code Playgroud)

但是 Leak Canary 检测到似乎与 TabLayout 和 TabLayoutMediator 相关的内存泄漏。日志如下:

2020-05-13 17:57:32.914 D/LeakCanary: ????
2020-05-13 17:57:32.914 D/LeakCanary: ? GC Root: Local variable in native code
2020-05-13 17:57:32.914 D/LeakCanary: ?
2020-05-13 17:57:32.914 D/LeakCanary: ?? android.net.ConnectivityThread instance
2020-05-13 17:57:32.914 D/LeakCanary: ?    Leaking: NO (PathClassLoader? is not leaking)
2020-05-13 17:57:32.914 D/LeakCanary: ?    Thread name: 'ConnectivityThread'
2020-05-13 17:57:32.914 D/LeakCanary: ?    ? ConnectivityThread.contextClassLoader
2020-05-13 17:57:32.914 D/LeakCanary: …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks leakcanary android-tablayout

10
推荐指数
3
解决办法
2467
查看次数

使用导航架构组件实现时如何在选项卡布局的选项卡中添加向左或向右滑动

在 TabLayout 的 Tabs 中实现滑动的一种方法是使用 viewpager。使用导航架构组件进行导航尚不清楚如何使用viewpager。如果我们不使用 viewpager,那么在 TabLayout 的选项卡中实现向左或向右滑动的推荐方法是什么。

android android-architecture android-architecture-components android-jetpack android-architecture-navigation

7
推荐指数
0
解决办法
913
查看次数

NavController 在方向改变时崩溃

我不确定我在这里做错了什么。简单的设置,单个活动,片段由内部底部栏控制,到目前为止一切顺利。开始片段有一个按钮,它应该导航到另一个片段。

这是我的片段类中按钮的 onclicklistener:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    add_step_fab.setOnClickListener {
        Navigation.findNavController(view).navigate(R.id.fragmentAtoB)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我在 navigation.xml 中的操作:

<fragment android:id="@+id/navigation_main" android:name="com.test.test.fragments.AFragment"
          android:label="Fragment A" tools:layout="@layout/fragment_a">
    <action android:id="@+id/fragmentAtoB"
            app:destination="@id/fragmentB" app:enterAnim="@anim/nav_default_enter_anim"
            app:exitAnim="@anim/nav_default_exit_anim" app:popEnterAnim="@anim/nav_default_pop_enter_anim"
            app:popExitAnim="@anim/nav_default_pop_exit_anim"/>
</fragment>
Run Code Online (Sandbox Code Playgroud)

导航有效,但我得到了标准

java.lang.IllegalArgumentException: navigation destination com.test.test:id/fragmentAtoB is unknown to this NavController
Run Code Online (Sandbox Code Playgroud)

在旋转屏幕、拆分应用程序或有时看似随机后单击按钮时出错。貌似跟配置变化有关系?

编辑:我也尝试使用

val clickListener: View.OnClickListener = Navigation.createNavigateOnClickListener(R.id.fragmentAtoB)
    add_step_fab.setOnClickListener(clickListener)
Run Code Online (Sandbox Code Playgroud)

与上述相同的问题。

检查我是否真的在同一个片段中,正如一些为具有相同异常(但出于无关原因)的用户所建议的那样,例如:

if (controller.currentDestination?.id == R.id.navigation_main) {
            controller.navigate(R.id.fragmentAtoB)
        }
Run Code Online (Sandbox Code Playgroud)

也没有帮助。

android kotlin android-jetpack android-jetpack-navigation

3
推荐指数
1
解决办法
2429
查看次数