Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 什么';这是MvvmCross 3.5.1中实现片段的正确方法_Android_Android Fragments_Xamarin_Xamarin.android_Mvvmcross - Fatal编程技术网

Android 什么';这是MvvmCross 3.5.1中实现片段的正确方法

Android 什么';这是MvvmCross 3.5.1中实现片段的正确方法,android,android-fragments,xamarin,xamarin.android,mvvmcross,Android,Android Fragments,Xamarin,Xamarin.android,Mvvmcross,在从3.5升级到3.5.1之后,我在Xamarin.Android项目中发现了一些错误,这些错误导致了片段膨胀 Unable to start activity ComponentInfo{xxx.xxx/md51537e9497dba76724980c8d1dff85301.MyView}: android.view.InflateException: Binary XML file line #1: Error inflating class fragment Caused by: an

在从3.5升级到3.5.1之后,我在Xamarin.Android项目中发现了一些错误,这些错误导致了片段膨胀

Unable to start activity ComponentInfo{xxx.xxx/md51537e9497dba76724980c8d1dff85301.MyView}: android.view.InflateException: Binary XML file line #1: Error inflating class fragment


Caused by: android.app.Fragment$InstantiationException: Trying to instantiate a class md51537e9497dba76724980c8d1dff85301.LoginView that is not a Fragment
是什么导致了这个错误?3.5.1中是否有突破性的变化

我的片段被定义为

public class LoginFormView : MvxFragment
    {
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var ignore = base.OnCreateView(inflater, container, savedInstanceState);
        return this.BindingInflate(Resource.Layout.LoginFormView, null);
    }
}
我已经通过Xamarin组件库提供了V4支持

我通过以下方式膨胀碎片:

public class LoginView : BaseMvxFragmentActivity
    {
...

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.LoginView);

        _loginForm = (LoginFormView)SupportFragmentManager.FindFragmentById(Resource.Id.sub_login_form);
        _loginForm.ViewModel = MyViewModel.LoginFormViewModel;
    }
    ...
 }
更新1

我的axml布局如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF">
<!-- Snip -->
<LinearLayout
    android:id="@+id/InnerRelativeLayout"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:animateLayoutChanges="true"
    android:padding="10dp">
    <fragment
        class="com.namespace.LoginFormView"
        android:id="@+id/sub_login_form"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        local:MvxBind="Visibility ShowLoginFormViewModel,Converter=Visibility" />
更多信息:

[MonoDroid] UNHANDLED EXCEPTION:
[MonoDroid] Android.Views.InflateException: Exception of type 'Android.Views.InflateException' was thrown.
[MonoDroid] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <IL 0x00011, 0x0004b>
[MonoDroid] at Android.Runtime.JNIEnv.CallObjectMethod (intptr,intptr,Android.Runtime.JValue*) [0x00064] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d23da369/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:195
[MonoDroid] at Android.Views.LayoutInflater.Inflate (int,Android.Views.ViewGroup,bool) [0x00082] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d23da369/source/monodroid/src/Mono.Android/platforms/android-16/src/generated/Android.Views.LayoutInflater.cs:687
[MonoDroid] at Cirrious.MvvmCross.Binding.Droid.BindingContext.MvxAndroidBindingContext.CommonInflate (int,Android.Views.ViewGroup,Cirrious.MvvmCross.Binding.Droid.Binders.IMvxLayoutInfactorFactory,bool) <IL 0x00030, 0x00136>
[MonoDroid] at Cirrious.MvvmCross.Binding.Droid.BindingContext.MvxAndroidBindingContext.BindingInflate (int,Android.Views.ViewGroup,bool) <IL 0x00015, 0x000a5>
[MonoDroid] at Cirrious.MvvmCross.Binding.Droid.BindingContext.MvxAndroidBindingContext.BindingInflate (int,Android.Views.ViewGroup) <IL 0x00004, 0x00044>
[MonoDroid] at Cirrious.MvvmCross.Binding.Droid.BindingContext.MvxBindingContextOwnerExtensions.BindingInflate (Cirrious.MvvmCross.Binding.BindingContext.IMvxBindingContextOwner,int,Android.Views.ViewGroup) <IL 0x0000f, 0x000f5>
[MonoDroid] at Cirrious.MvvmCross.Droid.Fragging.MvxFragmentActivity.SetContentView (int) <IL 0x00003, 0x00037>
[MonoDroid] at com.namespace.Droid.Views.LoginView.OnCreate (Android.OS.Bundle) [0x0000e] in /xxx/Ccom.namespace.Droid/Views/LoginView.cs:34
[MonoDroid] at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) [0x00011] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d23da369/source/monodroid/src/Mono.Android/platforms/android-16/src/generated/Android.App.Activity.cs:2374
[MonoDroid] at (wrapper dynamic-method) object.facfe989-fd2b-40d3-bf63-959b844af987 (intptr,intptr,intptr) <IL 0x00017, 0x0002b>
[MonoDroid]未处理的异常:
[MonoDroid]Android.Views.InflateException:引发了类型为“Android.Views.InflateException”的异常。
[MonoDroid]位于System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在/Users/builder/data/lanes/MonoDroid-mavericks-MonoDroid-5.1-series/d23da369/source/MonoDroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:195中[0x00064]
在/Users/builder/data/lanes/MonoDroid-mavericks-MonoDroid-5.1-series/d23da369/source/MonoDroid/src/Mono.Android/platforms/Android-16/src/generated/Android.Views.LayoutInflater.cs:687中[0x00082]
[MonoDroid]位于Cirrious.MvvmCross.Binding.Droid.BindingContext.MvxAndroidBindingContext.CommonInflate(int,Android.Views.ViewGroup,Cirrious.MvvmCross.Binding.Droid.Binders.ImvxlayoutinFactory,bool)
[MonoDroid]位于cirries.MvvmCross.Binding.Droid.BindingContext.MvxAndroidBindingContext.BindingInflate(int,Android.Views.ViewGroup,bool)
[MonoDroid]位于cirries.MvvmCross.Binding.Droid.BindingContext.MvxAndroidBindingContext.BindingInflate(int,Android.Views.ViewGroup)
[MonoDroid]位于cirries.MvvmCross.Binding.Droid.BindingContext.MvxBindingContextOwnerExtensions.BindingInflate(cirries.MvvmCross.Binding.BindingContext.IMvxBindingContextOwner,int,Android.Views.ViewGroup)
[MonoDroid]位于cirrial.MvvmCross.Droid.Fragging.MvxFragmentActivity.SetContentView(int)
[MonoDroid]位于com.namespace.Droid.Views.LoginView.OnCreate(Android.OS.Bundle)[0x0000e]的/xxx/Ccom.namespace.Droid/Views/LoginView.cs:34
[MonoDroid]位于Android.App.Activity.n_OnCreate_Landroid_os_Bundle(intptr,intptr,intptr)[0x00011]in/Users/builder/data/lanes/MonoDroid-mavericks-MonoDroid-5.1-series/d23da369/source/MonoDroid/src/Mono.Android/platforms/Android/Android-16/src/generated/Android.App.Activity.cs:2374
[MonoDroid]at(包装器动态方法)object.facfe989-fd2b-40d3-bf63-959b844af987(intptr,intptr,intptr)

Xamarin.Android 5.1引入了一些突破性的变化。这意味着您需要在所有片段中添加
[注册(“app.namespace.FragmentName”)]

有关更多信息,请参阅:

编辑:

好的!这与#990无关。问题是由于某种原因,
MvxFragment
无法膨胀,因为它没有被识别为片段。当更改为最小目标15和FullFragging MvvmCross nuget时,它开始工作

还要记住,所有的Java名称空间都必须是小写的。因此,当您使用
[Register]
时,您必须遵守这一点

您的示例还有两个
MainLauncher
活动,因此我必须删除默认的
MainActivity
。您的
FirstViewFragment
还定义了一个
活动
,为什么会这样做

因此,简言之,我做了一些改变:

  • 最低目标15
  • 用完整的碎片替换碎片
  • FirstViewFragment
  • FirstViewFragment
  • FirstView
    MvxFragmentActivity
    更改为
    MvxActivity
  • 删除
    main活动
  • SupportFragmentManager
    替换为
    FragmentManager
  • FirstView.axml中的
    class
    中的小写名称空间

然后它就起作用了。为什么MvvmCross中的framents支持版本不起作用需要调查。

不幸的是,将属性添加到LoginFormView并不能解决问题。好的可能与您是否可以制作一个小的复制示例有关?复制示例在不确定我是否理解您的意思,什么是不起作用的?名称应为大写,但名称空间应为小写。比如:
com.abc.MyFragment
@Cheesebaron我们不能改变的片段呢?e、 g.名为
com.Google.android.gms.Maps.SupportMapFragment的Google地图片段
3.5.1中对android通货膨胀进行了更改-导致解决Xam android支持包更改-发布说明为。我怀疑你引用的通货膨胀信息不是来自MvvmCross。。。所以我的直觉告诉我,这更可能是因为Xam的变化,而不是Mvx的差异。当然@cheesebaron建议添加
[Register]
,然后进行清理和重建,这可能会有所帮助。谢谢,但我添加了[Register]并执行了清理/重建,但仍然收到相同的错误。如果仍然收到相同的错误,即关于md51537e9497dba76724980c8d1dff85301`则表示
寄存器
不起作用。您是对的,消息已更改(我错过了它),现在包含完整的命名空间。我添加了“更新3”。我想知道我是否应该使用FullFragging?
[MonoDroid] UNHANDLED EXCEPTION:
[MonoDroid] Android.Views.InflateException: Exception of type 'Android.Views.InflateException' was thrown.
[MonoDroid] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <IL 0x00011, 0x0004b>
[MonoDroid] at Android.Runtime.JNIEnv.CallObjectMethod (intptr,intptr,Android.Runtime.JValue*) [0x00064] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d23da369/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:195
[MonoDroid] at Android.Views.LayoutInflater.Inflate (int,Android.Views.ViewGroup,bool) [0x00082] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d23da369/source/monodroid/src/Mono.Android/platforms/android-16/src/generated/Android.Views.LayoutInflater.cs:687
[MonoDroid] at Cirrious.MvvmCross.Binding.Droid.BindingContext.MvxAndroidBindingContext.CommonInflate (int,Android.Views.ViewGroup,Cirrious.MvvmCross.Binding.Droid.Binders.IMvxLayoutInfactorFactory,bool) <IL 0x00030, 0x00136>
[MonoDroid] at Cirrious.MvvmCross.Binding.Droid.BindingContext.MvxAndroidBindingContext.BindingInflate (int,Android.Views.ViewGroup,bool) <IL 0x00015, 0x000a5>
[MonoDroid] at Cirrious.MvvmCross.Binding.Droid.BindingContext.MvxAndroidBindingContext.BindingInflate (int,Android.Views.ViewGroup) <IL 0x00004, 0x00044>
[MonoDroid] at Cirrious.MvvmCross.Binding.Droid.BindingContext.MvxBindingContextOwnerExtensions.BindingInflate (Cirrious.MvvmCross.Binding.BindingContext.IMvxBindingContextOwner,int,Android.Views.ViewGroup) <IL 0x0000f, 0x000f5>
[MonoDroid] at Cirrious.MvvmCross.Droid.Fragging.MvxFragmentActivity.SetContentView (int) <IL 0x00003, 0x00037>
[MonoDroid] at com.namespace.Droid.Views.LoginView.OnCreate (Android.OS.Bundle) [0x0000e] in /xxx/Ccom.namespace.Droid/Views/LoginView.cs:34
[MonoDroid] at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr,intptr,intptr) [0x00011] in /Users/builder/data/lanes/monodroid-mavericks-monodroid-5.1-series/d23da369/source/monodroid/src/Mono.Android/platforms/android-16/src/generated/Android.App.Activity.cs:2374
[MonoDroid] at (wrapper dynamic-method) object.facfe989-fd2b-40d3-bf63-959b844af987 (intptr,intptr,intptr) <IL 0x00017, 0x0002b>