在Xamarin Android +MVVM Cross中使用null父viewGroup是不鼓励的,这是一个奇怪的例外
本文关键字:一个 Cross +MVVM Android Xamarin viewGroup null | 更新日期: 2023-09-27 18:14:56
我是Xamarin开发的新手。我知道下面的问题是一个众所周知的问题,并在很多论坛上讨论。但是我找不到这个问题的精确解。所以请注意,这不是一个重复的问题。
我试图添加一个片段到android布局。当我膨胀片段时,我得到以下异常。
"using Inflate with a null parent viewGroup is discouraged - see https://github.com/MvvmCross/MvvmCross/issues/507"
我已经检查了给定的Url,该Url附带了异常。实际上,在我使用的程序集中没有"绑定膨胀"的重载方法。目前我只能访问一个只有两个输入参数(布局,视图组)的方法。Github的问题已经关闭,并注意到这个异常不再在最新的MVVM交叉(3.1.1)中,但在最新的稳定版本中仍然得到相同的异常。Mvvm Cross 3.1.2 beta有一个重载的方法,有三个参数,我们可以传递一个布尔值,如果视图组是空的。但是我得到同样的异常,即使我传递一个假的最后一个参数。我在这里做错了什么?有人能帮我吗?
活动[Activity(Label = "HomeView", MainLauncher = true)]
public class HomeView : MvxFragmentActivity
{
//Fragment
private HomeFragment _homeFragment;
public new HomeViewModel ViewModel
{
get { return (HomeViewModel) base.ViewModel; }
}
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.HomeView);
this.AddFragment(_homeFragment);
}
protected override void OnViewModelSet()
{
base.OnViewModelSet();
//Create the Home Fragment
_homeFragment = new HomeFragment {ViewModel = ViewModel};
}
//Add the Fragments to View
private void AddFragment(MvxFragment fragment)
{
var fragmentTrasaction = SupportFragmentManager.BeginTransaction();
fragmentTrasaction.Replace(Resource.Id.HomeContainer, _homeFragment);
fragmentTrasaction.Commit();
}
}
片段
public class HomeFragment : MvxFragment
{
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var ignore = base.OnCreateView(inflater, container, savedInstanceState);
return this.BindingInflate(Resource.Layout.HomeFragment, null);//Here i am getting the exception
}
}
活动布局<?xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/Test.Droid"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px">
android:id="@+id/HomeContainer"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
片段布局
<?xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/Test.Droid"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:text="Home"
android:layout_width="wrap_content"
android:layout_weight="1" />
我正在使用的MVVM包
"MvvmCross.HotTuna.CrossCore" version="3.1.1" targetFramework="MonoAndroid42"
"MvvmCross.HotTuna.Droid.Fragging" version="3.1.1" targetFramework="MonoAndroid42"
"MvvmCross.HotTuna.MvvmCrossLibraries" version="3.1.1" targetFramework="MonoAndroid42"
"MvvmCross.HotTuna.Plugin.Json" version="3.1.1" targetFramework="MonoAndroid42"
"MvvmCross.HotTuna.StarterPack" version="3.1.1" targetFramework="MonoAndroid42"
"MvvmCross.PortableSupport" version="3.1.1" targetFramework="MonoAndroid42"
"Xamarin.Android.Support.v4" version="20.0.0" targetFramework="MonoAndroid42"
Thanks in Advance
我正在查看调试跟踪。实际上有一个异常在Create方法上没有处理,因为oncreate没有Try Catch块。实际上例外是"二进制XML文件行#1:你必须提供一个layout_height属性",我没有把高度的文本框是在片段。
您似乎已经找到了问题,但是您仍然不应该将空父级传递到充气器。如果你这样做了,那么你在父视图上设置的任何主题设置等都不会影响你膨胀的视图。相反,将false作为第三个参数传递,这样视图就不会附加到父视图,而是从中获取选项。