列表内的网格 - 适配器布局 mvxexception
Grid inside list - adapter layout mvxexception
我尝试在 ListView 中显示 GridView。我想显示按某些属性分组的图像。
我的列表视图(信息:我删除了以下片段中的所有 layout-options(可读性更好):
<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 作为 parent。ListView 只是为了显示 header。
这是我用来显示列表视图的适配器:
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; }
}
}
应用程序崩溃,出现以下异常:
bindingContext is null during MvxAdapter creation - Adapter's should
only be created when a specific binding context has been placed on the
stack"
我不知道出了什么问题。没有内部 GridView 它可以完美运行,因此 BindingContext 不能为 null。有没有更好的方法来实现这一目标? (没有外部图书馆)?或者出了什么问题?谢谢
为了其他人有同样的问题,我回答我自己的问题。
问题是,我试图从正常上下文中引入布局。对于 MvvmCross,我需要使用 BindingContext 来做到这一点:
convertView = BindingContext.BindingInflate(templateId, parent, false);
此 BindingContext 是一个 IMvxAndroidBindingContext
并由构造函数设置。
我尝试在 ListView 中显示 GridView。我想显示按某些属性分组的图像。
我的列表视图(信息:我删除了以下片段中的所有 layout-options(可读性更好):
<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 作为 parent。ListView 只是为了显示 header。
这是我用来显示列表视图的适配器:
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; }
}
}
应用程序崩溃,出现以下异常:
bindingContext is null during MvxAdapter creation - Adapter's should only be created when a specific binding context has been placed on the stack"
我不知道出了什么问题。没有内部 GridView 它可以完美运行,因此 BindingContext 不能为 null。有没有更好的方法来实现这一目标? (没有外部图书馆)?或者出了什么问题?谢谢
为了其他人有同样的问题,我回答我自己的问题。
问题是,我试图从正常上下文中引入布局。对于 MvvmCross,我需要使用 BindingContext 来做到这一点:
convertView = BindingContext.BindingInflate(templateId, parent, false);
此 BindingContext 是一个 IMvxAndroidBindingContext
并由构造函数设置。