我试图使用jetpack导航从一个片段导航到一个bottomSheetDialogFragment,但每次我试图导航它只是崩溃的应用程序说,它找不到类名。
移动的导航.xml
<fragment
android:id="@+id/home_dest"
android:name="TestProject.Fragment.HomeFragment">
<action
android:id="@+id/action_home_to_bottom_sheet"
app:destination="@id/bottom_dialog"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right" /></fragment>
<dialog
android:id="@+id/bottom_dialog"
android:name="TestProject.Dialog.BottomDialog" />
底部对话框.cs
namespace TestProject.Dialog
{
public class BottomDialog : BottomSheetDialogFragment
{
public override View? OnCreateView(LayoutInflater inflater, ViewGroup? container, Bundle? savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
return inflater.Inflate(Resource.Layout.bottom_sheet_layout, container, false);
}
}
}
HomeFragment.cs按钮单击导航
private void OnButtonClick(object sender, EventArgs e)
{
var nav = Navigation.FindNavController(Activity, Resource.Id.my_nav_host_fragment);
nav.Navigate(Resource.Id.action_home_to_bottom_sheet);
}
错误
第一个月
与所有这一切,我得到一个崩溃,说它找不到名为BottomDialog这是不可能的,因为如果我改变移动的_navigation的标签从〈dialog到〈fragment它确实可以导航,但失去了所有的行为,一个底部的表必须有.我不知道是我错过了什么,或者如果它只是一些关于xamarin不工作.
有谁知道是什么原因造成的,为什么?我没有主意了
已经尝试清理/重建,并重新安装掘金,仍然没有好。
2条答案
按热度按时间pgvzfuti1#
@doczic,
乍一看,我没有发现任何错误。Java.Lang.ClassNotFoundException的常见原因是您的nav_graph中的一个打字错误-(我有一堆)不匹配完全限定的片段类名。我只在我的nav_graphs中使用片段,因为我不喜欢额外的东西,比如动画和动作等。我更喜欢通过NavOptions做动画,它允许你有一种以上的动画等,并允许很大的灵活性,我发现太多的事情,我不喜欢的图形,所以现在我限制它只是片段,然后写额外的代码导航。
我在生产应用程序的许多地方使用BottomDialogs作为HelperDialogs来解释不那么明显的功能,并允许用户在了解应用程序后选择关闭它们。
我有很多关于NavigationComponent的教程,叫做NavigationGraph(x),其中x等于一个数字,它演示了我如何从标准的东西演变为随着数字的增加通过代码做更多的事情。
它可能无法解决您的特定问题,但它确实演示了如何使用BottomSheetDialogFragment。NavigationGraph 7是我第一次介绍BottomDialogs的项目。还有一个Navigation 7 Net 7项目,但它是转换为Net 7项目的同一个项目,而NavigationGraph 7是xamarin.android的经典项目。
wlp8pajw2#
@doczic
它的东西有点简单,它不工作,无论我做什么,因此,为什么我开始相信它可能是与Xamarin的东西
我不会因为对话框不工作而被挂掉,因为从长远来看,我怀疑你最终会希望在nav_graph中有这个功能。然而,我怀疑这个特殊的问题与Xamarin有任何关系。
Google在开发NavigationComponent时有一个非常好的想法,但也许他们把nav_graph的概念带得有点太远了。2主要的想法是摆脱多个活动和碎片事务。3碎片事务是最难处理的事情。退一步想一想任何Android应用的整体结构,并考虑每个Android应用都可能使用的3个重要布局。activity_main,app_bar_main和content_main。最重要的一个是content_main。它包含了保存NavHostFragment的FragmentContainerView。无论你的应用增长到多大,你的应用中的每一个片段都适合FragmentContainerView。这使得他们没有太多地取消FragmentTransactions,而是为了隐藏片段事务的复杂性。在任何一个NavigationGraph项目中,您都找不到一个片段事务。
在我看来,nav_graph应该只是保存片段,换句话说,就是一个占位符。你甚至可以把它用作原型工具--拥有一个甚至还不存在于代码中的片段列表。这对构建一个项目没有负面影响。所以,如果你正在转换一个旧的项目,你可以在新项目的nav_graph中指定它。他们偏离轨道的地方是包括像捆绑包,动画,操作和关于返回栈应该如何弹出的信息等在nav_graph中。他们团队中的某个人一定也提出了NavOptions类,因为正是该类使我们的开发人员能够手动执行以下操作我们希望不必用所有额外的东西污染NAV_graph。
如果你检查NavigationGraph项目,你会发现我开始是按照他们的方式做的(那里甚至有一个Xamarin转换的NavigationCodeLab),然后随着项目的增加,我改变了他们的方法。我真的怀疑你会错过nav_graph中的一个特定对话框,当你可以使用像BasicDialogFragment这样的东西时,它继承自AppCompatDialogFragment,允许灵活性在任何地方。
我已经成功地转换了我的两个制作应用程序,可以说它们比原来的要好得多,也更可靠。
需要注意的是,一些NavigationGraph项目已经转换为Net 7项目,因此您可能希望将精力集中在没有net 7后缀的项目上。
AndroidX.Navigation.Fragment和Navigation.Ui也有一些问题,这与它们的依赖性有关,当你增加这两个依赖性时,它们会变得很明显,需要在Xamarin. Android中进行分类。所以不要自动将这些包更新到最新版本,使用每个项目中注明的版本。以后的项目可能会使用更新的版本,尽管当东西得到修复时。但是,没有什么是不能解决的。
忘了说他们在哪了https://github.com/gmck