#xamarin.android
#xamarin.android
Вопрос:
Я пытаюсь показать ListView внутри ListView
Это делается для создания вложенного ListView в Xamarin.Android (не Xamarin.Форма), но во втором ListView отображается только один элемент.
Я создал другой макет, чтобы поместить один текст метки и 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:
есть два способа достичь этого.
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 inner, используйте 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 );
}