网格内部列表 - 适配器布局mvxexception

时间:2015-07-31 07:57:39

标签: c# binding xamarin xamarin.android mvvmcross

我尝试在ListView中显示GridView。我想显示按某些属性分组的图像。

我的列表视图(信息:我删除了以下代码段中的所有布局选项(更易读):

<Mvx.MvxListView
    android:id="@+id/albumdetail_imagelist"
    local:MvxBind="ItemsSource Data.GroupedPictures;"
    local:MvxItemTemplate="@layout/list_albumdetail" />

然后是list_albumdetail布局文件:

<LinearLayout>
    <TextView android:id="@+id/albumdetailitem_header" />
    <Mvx.MvxGridView
        android:id="@+id/albumdetailitem_imagegrid"
        android:numColumns="3"
        android:stretchMode="columnWidth"
        local:MvxItemTemplate="@layout/list_phonepicture" />
</LinearLayout>

当上面的这个MvxGridView独立时(没有ListView作为父级)可以很好地工作.ListView只是为了显示一个标题。

这是我的适配器,用于显示Listview:

public class AlbumDetailAdapter : BasePictureSectionAdapter
{
    private readonly Activity _context;

    public AlbumDetailAdapter(Activity context, IMvxAndroidBindingContext bindingContext, bool hideheader = false)
        : base(context, bindingContext, hideheader)
    {
        _context = context;
    }

    protected override View GetView(int position, View convertView, ViewGroup parent, int templateId)
    {
        var keyitem = GetRawItem(position) as KeyedList<string, PictureDetailDataModel>;
        if (keyitem == null) return base.GetView(position, convertView, parent, templateId);

        AlbumDetailViewHoler holder = null;

        if (convertView == null)
        {
            // HERE CRASHS THE APP
            convertView = _context.LayoutInflater.Inflate(templateId, parent, false);
        }
        else
        {
            holder = (AlbumDetailViewHoler)convertView.Tag;
        }

        if (holder == null)
        {
            holder = new AlbumDetailViewHoler
            {
                Header = convertView.FindViewById<TextView>(Resource.Id.albumdetailitem_header),
                GridView = convertView.FindViewById<SpecialGridView>(Resource.Id.albumdetailitem_imagegrid)
            };

            holder.GridView.FastScrollEnabled = false;
            holder.GridView.Adapter = new PhonePictureAdapter(_context, BindingContext, 120);

            convertView.Tag = holder;
        }

        // Set header text
        holder.Header.Text = keyitem.Key;

        // Set itemsource
        holder.GridView.ItemsSource = keyitem.Values;

        return convertView;
    }


    private class AlbumDetailViewHoler : BaseSectionViewHolder
    {
        public SpecialGridView GridView { get; set; }
    }
}

应用程序崩溃时出现以下异常:

  在创建MvxAdapter期间,

bindingContext为null - 适配器应该   只有在特定的绑定上下文被放置时才会创建   栈“

我不知道什么是错的。如果没有内部GridView,它可以完美地工作,因此BindingContext不能为null。有没有更好的方法来实现这一目标? (没有外部库)?或者什么是错的?感谢

1 个答案:

答案 0 :(得分:0)

对于有相同问题的其他人,我回答我自己的问题。

问题是,我试图从正常的上下文中渗透布局。使用MvvmCross我需要使用BindingContext:

convertView = BindingContext.BindingInflate(templateId, parent, false);

此BindingContext是IMvxAndroidBindingContext,由构造函数设置。