Xamarin.Android中的嵌套Listview - 在Listview中尝试使用Listview

问题描述 投票:0回答:1

我正在尝试在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;
xamarin.android
1个回答
0
投票

有两种方法可以实现它。

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 );

    }
© www.soinside.com 2019 - 2024. All rights reserved.