【问题标题】:MVVMCross Exception when inflating a Layout with binding使用绑定膨胀布局时出现 MVVMCross 异常
【发布时间】:2014-06-02 22:20:34
【问题描述】:

我正在使用 Xamarin 和 MVVMCross 开发一个 android 应用程序。

我在尝试扩展旨在为用户提供选择列表的布局时遇到以下异常。我该如何解决或解决此问题

例外:

Cirrious.CrossCore.Exceptions.MvxException:在创建 MvxAdapter 期间 bindingContext 为 null - 只有在将特定绑定上下文放置在堆栈上时才应创建适配器

来源:

var alertBuilder = new AlertDialog.Builder(this);
var view = LayoutInflater.Inflate (Resource.Layout.HeadPartSelectionView, null);

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res/xxxxxxxxx.xxx.Android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/redpink"
        android:id="@+id/layoutCancelNextButtons">
        <Button
            android:text="Cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/buttonCancelHeadPart"
            android:layout_weight="1"
            android:textColor="@color/white"
            android:background="@color/redpink" />
        <Button
            android:text="Next"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/buttonCancelHeadPart"
            android:id="@+id/buttonSelectHeadPart"
            android:layout_weight="1"
            android:textColor="@color/white"
            android:background="@color/redpink" />
    </LinearLayout>
    <Cirrious.MvvmCross.Binding.Droid.Views.MvxListView
        android:layout_width="fill_parent"
        android:layout_height="120dp"
        android:id="@+id/listHeadPart"
        android:layout_below="@id/layoutCancelNextButtons"
        android:textColor="@color/darkgrey"
        android:background="@color/white"
        local:MvxBind="ItemsSource SubAreas"
        local:MvxItemTemplate="@layout/list_headpicklist" />
</RelativeLayout>

ListView 布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res/xxxxxxxxx.xxx.Android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_gravity="center"
        android:textColor="@color/darkgrey"
        local:MvxBind="Text Name"
        android:textSize="24dp" />
</LinearLayout>

【问题讨论】:

    标签: android xamarin mvvmcross


    【解决方案1】:

    这就是我创建对话框片段的方式。您需要使用BindingInflate() 而不是标准的LayoutInflater

    public class MyDialogFragment : MvxDialogFragment
    {
        public override Dialog OnCreateDialog(Bundle savedInstanceState)
        {
            base.EnsureBindingContextSet(savedInstanceState);
            var view = this.BindingInflate(Resource.Layout.Dialog_MyDialog, null);
    
            var dialog = new AlertDialog.Builder(Activity);
            dialog.SetTitle("Title");
            dialog.SetView(view);
            dialog.SetNegativeButton("Cancel", (s, a) => { });
            dialog.SetPositiveButton("OK", (s, a) => ViewModel.DoCommand());
    
            return dialog.Create();
        }
    }
    

    【讨论】:

    • 使用 BindingInflate 调用已停止异常。我仍然有一个小的绑定问题,但这是一个我能够解决的单独问题。感谢您的帮助。
    • base.EnsureBindingContext(Bundle) 已被删除。您现在可以使用MvxFragmentExtensions.EunsureBindingContextSet(IMvxFragmentView) 获得相同的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多