ListView 第一项不是 visible/updating Android

ListView first item not visible/updating Android

我的布局中有 3 个组件 ListView、EditText、Button。 当用户在编辑文本中输入文本并点击按钮时,应用程序会调用 Api ,我刚刚添加的文本会添加到现有列表中,并获取项目列表。现在,我的问题是 api 调用成功并且我正确地获得了包含我的新项目的列表。但是当我在列表视图中显示它时,ListView 中的第一项永远不可见。我在第一个文本之后添加的文本是正确可见的,即使我有一个包含 10 个或更多项目的列表,第一个项目也永远不会显示。此外,我正在显示滚动视图中的列表视图和其他组件以获取完整长度。

这是我的代码:-

 public class ItemListAdapter : BaseAdapter
    {
        public ItemListAdapter(Activities.Detail detail, List<Models.ListOfItems> itemList)
        {
            // TODO: Complete member initialization
            this.detail = detail;
            this.itemList = itemList;
            inflater = detail.LayoutInflater;
        }
        public override int Count
        {
            get { return itemList.Count; }
        }

        public override Java.Lang.Object GetItem(int position)
        {
            return position;
        }

        public override long GetItemId(int position)
        {
            return position;
        }

        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            if (convertView == null)
            {
                convertView = inflater.Inflate(Resource.Layout.item_row_layout, null);

            }
            txtAuthorName = convertView.FindViewById<TextView>(Resource.Id.txtCommentAuthor);
            txtItemName = convertView.FindViewById<TextView>(Resource.Id.txtTime);
            txtItemDate = convertView.FindViewById<TextView>(Resource.Id.txtItemDate);

            var mData = itemList.ElementAt(position);
            txtAuthorName.Text = mData.AuthorDisplayName;
            txtItemName.Text = DateTime.Parse(mData.DateUpdated).ToString("dd MMMM yyyy", CultureInfo.InvariantCulture);
            txtItemDate.Text = mData.Text;
            return convertView;
        }

    }

列表视图全高代码:-

public static void SetListViewHeightBasedOnChildren(ListView listView)
        {
            IListAdapter listAdapter = listView.Adapter;
            if (listAdapter == null)
                return;

            int desiredWidth = Android.Views.View.MeasureSpec.MakeMeasureSpec(listView.Width, MeasureSpecMode.Unspecified);
            int totalHeight = 0;
            View view = null;
            for (int i = 0; i < listAdapter.Count; i++)
            {
                view = listAdapter.GetView(i, view, listView);
                if (i == 0)
                    view.LayoutParameters = new ViewGroup.LayoutParams(desiredWidth, ViewGroup.LayoutParams.WrapContent);


                totalHeight += view.MeasuredHeight;
                view.Measure(desiredWidth, totalHeight);
            }
            ViewGroup.LayoutParams param = listView.LayoutParameters;
            param.Height = totalHeight + (listView.DividerHeight * (listAdapter.Count - 1));
            listView.LayoutParameters = param;
            listView.RequestLayout();
        }

尝试下面的代码可能是因为分隔高度。您是否在列表视图中为分隔线定义了自定义高度?

    /**
     * Sets ListView height dynamically based on the height of the items.
     *
     * @param listView to be resized
     *
     */

    public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        float singleViewHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
            singleViewHeight = listItem.getMeasuredHeight();
        }

        // Get total height of all item dividers.
        int totalDividersHeight = listView.getDividerHeight() *
                (listAdapter.getCount() - 1);

        // Set list height
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + totalDividersHeight + (Math.round(singleViewHeight / 2));
        listView.setLayoutParams(params);
        listView.requestLayout();

    }