Reputation: 64844
I have a list of items that I want to display in a ListView
using a custom adapter
but is showing only one item despite the list if daat contains more values..
The code that set the adapter:
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() + "");
}
The code of custom adapter is :
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;
}
}
Upvotes: 0
Views: 1808
Reputation: 4701
First dont use listview inside scrollview. this is wrong.
if you have to you should calculate listview height manually and set it programatically like below code:
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();
}
but remember you can always add header or footer to your listview.
Upvotes: 1