2014-09-15 2 views
0

У меня есть список элементов, которые я хочу отобразить в ListView, используя пользовательский adapter, но отображается только один элемент, несмотря на список, если даат содержит больше значений.ListView не отображает все элементы (только первые)

код, который установлен адаптер:

if (app.familyMemebers != null) { 

    Log.d("family", app.familyMemebers.size() + ""); 
    FamilyMemeberAdapter fad = new FamilyMemeberAdapter(
      getApplicationContext(), R.layout.family_row, 
      app.familyMemebers); 
    lvFamilyMemebr.setAdapter(fad); 

    Log.d("count >>>>", fad.getCount() + ""); 
} 

код пользовательского адаптера является:

package com.example.importtoolapp; 

import java.util.List; 

import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class FamilyMemeberAdapter extends ArrayAdapter<FamilyMemeber> { 

    private List<FamilyMemeber> values; 
    private Context context; 

    public FamilyMemeberAdapter(Context context, int textViewResourceId, 
      List<FamilyMemeber> values) { 
     super(context, textViewResourceId, values); 
     this.context = context; 
     this.values = values; 
    } 

    @Override 
    public View getView(int position, View v, ViewGroup parent) { 
     // Keeps reference to avoid future findViewById() 
     valuesViewHolder viewHolder; 
     final FamilyMemeber obj = values.get(position); 

     if (v == null) { 
      LayoutInflater li = (LayoutInflater) getContext().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE); 
      v = li.inflate(R.layout.family_row, parent, false); 

      viewHolder = new valuesViewHolder(); 
      viewHolder.tvID = (TextView) v.findViewById(R.id.tvID); 
      viewHolder.tvName = (TextView) v.findViewById(R.id.tvName); 
      viewHolder.tvIndrc = (TextView) v.findViewById(R.id.tvIndrc); 
      viewHolder.tvIdnumber = (TextView) v.findViewById(R.id.tvIdnumber); 
      viewHolder.tvRelation = (TextView) v.findViewById(R.id.tvRelation); 
      viewHolder.tvBDate = (TextView) v.findViewById(R.id.tvBDate); 

      v.setTag(viewHolder); 
     } else { 
      viewHolder = (valuesViewHolder) v.getTag(); 
     } 

     if (obj != null) { 
      viewHolder.tvID.setText(obj.familyid); 
      viewHolder.tvName.setText(obj.fname); 
      viewHolder.tvIndrc.setText(obj.indrc); 
      viewHolder.tvIdnumber.setText(obj.idnumber); 
      viewHolder.tvRelation.setText(obj.hofrelation); 
      viewHolder.tvBDate.setText(obj.bdate); 
     } 
     return v; 
    } 

    static class valuesViewHolder { 
     TextView tvName; 
     TextView tvID; 
     TextView tvIndrc; 
     TextView tvIdnumber; 
     TextView tvRelation; 
     TextView tvBDate; 
    } 

} 
+0

все выглядит нормально, но почему вы используете textViewResourceId? – santalu

+0

Чтобы передать его суперконструктору – Adham

+0

Можете ли вы предоставить код, в котором вы установили адаптер. И изменяете ли вы свой список значений где-то вне адаптера? – Ayzen

ответ

1

Первое использование Dont ListView внутри Scrollview. это не верно.

если вы должны вы должны рассчитать высоту ListView вручную и установить его программно, как показано ниже код:

public static void setListViewHeightBasedOnChildren(ListView listView) { 

    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) { 
     return; 
    } 

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

    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 
    listView.requestLayout(); 
} 

, но помните, что вы всегда можете добавить колонтитулы к вашему ListView.

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