我正在尝试在ListView中显示ListView
这是在Xamarin.Android(不是Xamarin.Form)中构建嵌套的ListView,但第二个ListView只显示一个Item。
我创建了另一个布局来放置一个Label Text和ListView,使用basedapater来填充主LV。
View listitem = convertView;
listitem = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.ListViewDesign, parent, false);
TextView TxtNo = listitem.FindViewById<TextView>(Resource.Id.TxtNo);
LinearLayout layout = listitem.FindViewById<LinearLayout>(Resource.Id.linearLayout1);
layout.Visibility = ViewStates.Visible;
ListView ListLibros = listitem.FindViewById<ListView>(Resource.Id.ListLibros);
List<string> lista = new List<string>();
TxtNo.Text = mItem[position].AUTOR;
for (var i = 0; i < mItem[position].LIBROS.Count(); i++) {
lista.Add(mItem[position].LIBROS[i].Descripcion);
}
ListLibros.Adapter = new ArrayAdapter<string>(ListLibros.Context, Android.Resource.Layout.SimpleListItem1, lista);
return listitem;
有两种方法可以实现它。
1.自定义ListView,覆盖OnMeaSure
方法,如下所示:
class MyListView :ListView
{
protected MyListView(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
public MyListView(Context context) : base(context)
{
}
public MyListView(Context context, IAttributeSet attrs) : base(context, attrs)
{
}
public MyListView(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr)
{
}
public MyListView(Context context, IAttributeSet attrs, int defStyleAttr, int defStyleRes) : base(context, attrs, defStyleAttr, defStyleRes)
{
}
protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int expandSpec = MeasureSpec.MakeMeasureSpec(Integer.MaxValue >> 2,
MeasureSpecMode.AtMost);
base.OnMeasure(widthMeasureSpec, expandSpec);
}
}
然后使用MyListView作为内部ListView。
2.不要使用ListView内部,使用由Views填充的LinearLayout,如下所示:
LinearLayout list = (LinearLayout) listitem.findViewById(R.id.list_layout);
list.removeAllViews();
for (var i = 0; i < mItem[position].LIBROS.Count(); i++) {
TextView textView = new TextView(context); // you could custon View here
textView.Text = mItem[position].LIBROS[i].Descripcion;
lista.Add(textView );
}