2016-02-14 4 views
1

У меня есть 3 компонента в моем макете ListView, EditText, Button. Когда пользователь вводит текст в edittext и нажимает кнопку, приложение выполняет вызов Api, мой добавленный текст добавляется в существующий список и выбирает список элементов. Теперь моя проблема в том, что вызов api удался, и я правильно получил список с моим новым элементом. Но когда я показываю его в списке, первый элемент в ListView никогда не отображается. Текст, который я добавляю после первого текста, отображается правильно, даже если у меня есть список из 10 или более пунктов, первый элемент никогда не отображается. Кроме того, я показываю список и другие компоненты внутри scrollview для полной длины.ListView первый элемент не отображается/обновляется Android

Вот мой код: -

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

    } 

Код для ListView принять полную высоту: -

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

ответ

2

Попробуйте приведенный ниже код может быть его из-за высоты делителя. Вы определили пользовательскую высоту для разделителя в своем списке ?.

/** 
    * 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(); 

    } 
+0

Идеальное решение. Спас мой день. Спасибо. –

Смежные вопросы