This post is related to this ViewHolder not working. On that post, I was following a tutorial on how to use ViewHolder on a ListView. What I want
The problem is that once you've inflated the view it can be reused many times in any position. I'd suggest the following approach: you inflate all but last item as usual (including the view holder), but for the last item you hold the reference as a field of CustomListAdapter and return it every time the last item is requested:
private class CustomListAdapter extends ArrayAdapter {
...
private View mLastItem;
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
...
int lastpos = mList.size()-1;
if (view == null) {
ViewHolder holder = new ViewHolder();
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (position == lastpos) {
view = vi.inflate(R.layout.list_item_record, null);
holder.textView = (TextView)view.findViewById(R.id.record_view);
mLastItem = view;
}
else {
view = vi.inflate(R.layout.list_item_bn, null);
holder.textView = (TextView)view.findViewById(R.id.tv_name);
}
view.setTag(holder);
}
if (position == lastpos) {
... // Update the last item here
return mLastItem;
}
...
}
}