【问题标题】:Error inflating class fragment, Xamarin膨胀类片段时出错,Xamarin
【发布时间】:2014-05-19 12:25:33
【问题描述】:

我在将片段膨胀到布局时出错。 我正在使用的 IDE 是 Xamarin,它是一个使用 C# 编程语言的 android 开发工具。

我得到这个目录中的类的错误

JeugdbewegingApp\JeugdbewegingApp\Presentation\MainMenu.cs

在下面的代码中,错误是由片段类名引发的。 此代码来自 NewsFeed.axml 布局文件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Button
        android:id="@+id/myButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="test" />
    <TextView
        android:text="Text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1" />
    <fragment
        class="jeugdbewegingApp/jeugdbewegingApp/presentation/MainMenu"
        android:id="@+id/menu_fragment"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</LinearLayout>

我知道命名空间需要小写,但您的文件和目录是否需要小写?

我已经卡了很长时间了,找不到解决方案,我正在使用的教程是 http://docs.xamarin.com/guides/android/platform_features/fragments/part_1_-_creating_a_fragment/

完整的错误是这样的

Android.Views.InflateException:二进制 XML 文件第 1 行:错误 膨胀类片段 Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (intptr,intptr,intptr,Android.Runtime.JValue[]) [0x00084] 在 /Users/builder/data/lanes/monodroid-mlion-monodroid-4.12-series/a1e3982a/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:895 在 Android.App.Activity.SetContentView (int) [0x00070] 中 /Users/builder/data/lanes/monodroid-mlion-monodroid-4.12-series/a1e3982a/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.App.Activity.cs:4252 在 JeugdbewegingApp.NewsFeed.OnCreate (Android.OS.Bundle) [0x00009] 中 c:\Users\Jacob\Dropbox\2ICT\2de Semester\Projecten 1\Source\Jacob\JeugdbewegingApp\JeugdbewegingApp\Presentation\NewsFeed.cs:24 在 Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) [0x00011] 在 /Users/builder/data/lanes/monodroid-mlion-monodroid-4.12-series/a1e3982a/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.App.Activity.cs:2178 at at (包装动态方法) object.08e9bb04-13ac-4397-9345-6bea3473292f (intptr,intptr,intptr) at --- 托管异常堆栈跟踪结束 ---
在 android.view.InflateException:二进制 XML 文件第 1 行:错误 在 at 膨胀类片段 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
在 android.view.LayoutInflater.inflate(LayoutInflater.java:492)
在 android.view.LayoutInflater.inflate(LayoutInflater.java:397)
在 android.view.LayoutInflater.inflate(LayoutInflater.java:353)
在 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290) 在 android.app.Activity.setContentView(Activity.java:1929) 在 jeugdbewegingapp.NewsFeed.n_onCreate(Native Method) at jeugdbewegingapp.NewsFeed.onCreate(NewsFeed.java:28) 在 android.app.Activity.performCreate(Activity.java:5231) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 在 android.app.ActivityThread.access$800(ActivityThread.java:135)
在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5017) 在 java.lang.reflect.Method.invokeNative(Native Method) at at java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method) at 原因: android.app.Fragment$InstantiationException:无法实例化 片段 jeugdbewegingapp/jeugdbewegingapp/presentation/MainMenu:制作 确定类名存在,是公共的,并且有一个空的构造函数 在 android.app.Fragment.instantiate(Fragment.java:597) 公开 在 android.app.Fragment.instantiate(Fragment.java:561) 在 android.app.Activity.onCreateView(Activity.java:4778) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689) 在 ... 22 更多在 Caused by: java.lang.ClassNotFoundException: 没找到课 路径上的“jeugdbewegingapp/jeugdbewegingapp/presentation/MainMenu”: DexPathList[[压缩文件 "/data/app/JeugdbewegingApp.JeugdbewegingApp-1.apk"],nativeLibraryDirectories=[/data/app-lib/JeugdbewegingApp.JeugdbewegingApp-1, /vendor/lib, /system/lib]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:497) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:457) 在 android.app.Fragment.instantiate(Fragment.java:583) at ... 25 更多

如果有人可以帮助我,将不胜感激!

【问题讨论】:

    标签: c# android android-fragments xamarin


    【解决方案1】:

    类属性应该包含类的完整命名空间,而不是路径。正如您所建议的,命名空间必须全部小写,因为 Java 使用小写命名空间。 Xamarin 为您的自定义类生成的包装类中的命名空间将是小写的。实际的类名将保持不变,因此不需要小写。

    所以,假设您的命名空间是JeugdbewegingApp.JeugdbewegingApp.Presentation.MainMenu,您的片段 xml 应该如下所示...

    <fragment
        class="jeugdbewegingapp.jeugdbewegingapp.presentation.MainMenu"
        android:id="@+id/menu_fragment"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    

    【讨论】:

    • 感谢您的回答!将片段移动到另一个目录后,我忘记更改片段的命名空间...
    • 如果你有 '.' 怎么办?项目名称中的点?像 Xamarin Forms projs 'Name.Droid'
    猜你喜欢
    • 2011-09-19
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多