Questions tagged «android-architecture-navigation»

30
IllegalArgumentException:此NavController未知导航目标xxx
当我尝试从一个Fragment导航到另一个Fragment时,新的Android Navigation Architecture组件出现问题,出现这个奇怪的错误: java.lang.IllegalArgumentException: navigation destination XXX is unknown to this NavController 除此特定导航外,其他所有导航都可以正常工作。 我使用findNavController()Fragment的功能来访问NavController。 任何帮助将不胜感激。

12
导航到Android中的另一个片段后如何清除导航堆栈
我在android中使用新的Navigation Architecture组件,并且在移至新片段后仍无法清除导航堆栈。 示例:我在loginFragment中,并且当我导航到home片段时,我希望从堆栈中清除此片段,以便用户在按“后退”按钮时不会返回到loginFragment。 我正在使用一个简单的NavHostFragment.findNavController(Fragment).navigate(R.id.homeFragment)进行导航。 当前代码: mAuth.signInWithCredential(credential) .addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment); } else { Log.w(TAG, "signInWithCredential:failure", task.getException()); } } }); 我尝试使用NavOptions在导航() ,但后退按钮仍然送我回loginFragment NavOptions.Builder navBuilder = new NavOptions.Builder(); NavOptions navOptions = navBuilder.setPopUpTo(R.id.homeFragment, false).build(); NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment, null, navOptions);

1
Navigation Arch Component会造成假阳性内存泄漏吗?
我对内存泄漏以及可能导致它们的原因有基本的了解。这就是为什么我不明白我的代码中是否有问题还是误报的原因。我不知道我应该共享代码的哪一部分,因为该项目并不小。但是,请在评论中让我知道,然后我将添加所需的代码。 我使用导航拱形组件并遵循MVVM模式。我在项目开发的后期添加了LeakCanary库,当我在屏幕之间导航时,它立即开始向我发出有关保留实例的警告。 当我将片段添加到后堆栈时,会发生问题。随着向后堆栈中添加的每个片段,保留实例的计数器增加。当达到阈值5时,LeakCanary将转储堆并提供报告。 但是,如果我单击“后退”按钮并返回到先前的屏幕,则保留实例的计数器减少,最终,当返回到第一个屏幕时,所有保留的实例都会消失。 如果我查看堆分析报告,它表示变量coordinatorLayout是CoordinatorLayoutxml中的引用。如果删除该变量及其所有用法,然后再次运行该应用程序,我会看到相同的问题,但是现在有了另一个变量,该变量引用了xml中的另一个视图。我试图删除LeakCanary报告为泄漏的所有视图及其用法。当它说a TextView只是用于设置文本onViewCreated而不在其他地方使用时,正在泄漏,我开始怀疑我的代码是否有问题。 我分析了片段中的生命周期方法调用,并注意到当我导航到先前片段的新屏幕时,直到(包括)所有方法onDestroyView都被调用,但没有被调用onDestroy。当我单击返回时,onDestroy将调用位于后堆栈顶部和保留实例顶部的片段,计数器会减少。 我怀疑导航组件在返回堆栈中时会保留片段的实例,而LeakCanary却将其视为泄漏。

1
ViewModel状态的ViewPager2 / Tabs问题
我正在遵循MVVM模式-意味着每个片段都有一个ViewModel。 我使用ViewPager2 添加了两个选项卡。 我的适配器如下所示: @Override public Fragment createFragment(int position) { switch (position) { case 0: return new MergedItemsFragment(); case 1: return new ValidatedMergedItemsFragment(); } return new MergedItemsFragment(); } 选项卡正在工作。但是,我注意到我的MergedItemsFragment的ViewModel行为异常。在添加选项卡之前,我像这样导航到片段: NavHostFragment.findNavController(this).navigate(R.id.action_roomFragment_to_itemsFragment); 当我将该片段留给NavHostFragment.findNavController(this).popBackStack()以后再返回该片段时,我将得到一个新的空ViewModel。这是有意的。 使用新方法,我正在使用return new MergedItemsFragment()。当我离开该片段并稍后返回时,我得到一个包含旧数据的ViewModel 。这是一个问题,因为旧数据不再相关,因为用户在另一个片段中选择了不同的数据。 更新#1 我意识到他实际上将所有旧的Fragments保留在内存中,因为同一打印语句被多次调用。它的调用时间随着我离开并返回该屏幕的次数而增加。因此,如果我离开并返回10次并旋转设备,他实际上将执行10次一行。有人猜测如何以与ViewModels一起使用的方式来实现带有导航组件的Tabs / ViewPagers吗? 更新#2 我将ViewModels设置如下: viewModel = new ViewModelProvider(this, providerFactory).get(MergedItemViewModel.class) 我得到相同的结果: viewModel = ViewModelProviders.of(this).get(MergedItemViewModel.class); …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.