I’ve got a ListView that is populated using a custom BaseAdapter (MyBaseAdapter) :
public class MyBaseAdapter extends BaseAdapter
{
private View renderer;
List<MyItemModel> items;
public MyBaseAdapter(View renderer) {
this.renderer = renderer;
}
public void setModel(List<MyItemModel> items)
{
this.items = items;
notifyDataSetChanged();
}
@Override
public int getCount()
{
return items != null ? items.size() : 0;
}
@Override
public Object getItem(int position)
{
return items != null ? items.get(position) : null;
}
@Override
public long getItemId(int position)
{
return items != null ? items.get(position).id : -1;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
convertView = renderer;
}
MyItemModel item = items.get(position);
// replace those R.ids by the ones inside your custom list_item layout.
TextView timeText = (TextView) convertView.findViewById(R.id.timeText);
timeText.setText(item.time);
ToggleButton button = (ToggleButton) convertView.findViewById(R.id.toggleButton);
button.setOnClickListener(item.listener);
ImageView coinImage = (ImageView) convertView.findViewById(R.id.coinImage);
coinImage.setImageResource(R.drawable.ic_refresh);
return convertView;
}
}
It’s populated using these items
public class MyItemModel
{
String time;
long id;
OnClickListener listener = new OnClickListener(){
@Override
public void onClick(View v) {
Log.d("app", "whatever");
}
};
}
And I add items to it from my Main class using code like this:
private void setUpList()
{
myListModel = new ArrayList<MyItemModel>();
MyItemModel item = new MyItemModel();
item.time = "12:00";
item.id = 0;
myListModel.add(item);
//if I add a few more items here, it still only shows the bottom one
LayoutInflater li = getLayoutInflater();
//alarm_list_item is a table row
View view = li.inflate(R.layout.alarm_list_item, null);
adapter = new MyBaseAdapter(view);
adapter.setModel(myListModel);
setListAdapter(adapter);
listView = getListView();
listView.setTextFilterEnabled(true);
}
And that works fine until I add another item to the list when this happens (note the row above it is blank. If I add more than one rows, all rows apart from the last one are blank like this.)
Any ideas what’s going on?

I don’t know the background of your problem, but member renderer in your Adapter seam a little strange. It make all the item view in the listView the first itemView created.
I think you can try modify your getView(int position, View convertView, ViewGroup parent) method as below:
and in your setUpList(), pass your host activity as parameter when constructing your adapter:
May it helps