У меня есть ListActivity
, в котором я пытаюсь отобразить ImageView
под списком.Я пытаюсь сделать это, создав свой собственный BaseAdapter
и используя два разных метода внутри метода getView
, один для списка и один для ImageView
.Мне удалось отобразить ImageView
под списком так, как я хочу, но проблема, с которой я столкнулся, заключается в том, что список отображается неправильно.
По какой-то причине любой элемент в списке, который не отображаетсяна экране до тех пор, пока пользователь не прокрутит вниз, он заполнится неверными данными, например так:
----Top Screen------
| Item 1 |
| Item 2 |
| Item 3 |
| Item 4 |
----Bottom Screen---
| Item 1 | <--Items not on the screen show
| Item 1 | <--as item 1 once the user scrolls
| Image View |
То, что должно быть, выглядит так:
----Top Screen------
| Item 1 |
| Item 2 |
| Item 3 |
| Item 4 |
----Bottom Screen---
| Item 5 |
| Item 6 |
| Image View |
Мой пользовательский BaseAdapter
private class MyCustomAdapter extends BaseAdapter {
private static final int TYPE_ITEM = 0;
private static final int TYPE_SEPARATOR = 1;
private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1;
private ArrayList<HashMap<String,String>> mData = new ArrayList<HashMap<String,String>>();
private LayoutInflater mInflater;
private TreeSet mSeparatorsSet = new TreeSet();
public MyCustomAdapter() {
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void addItem(final String header, final String message) {
HashMap<String,String> item = new HashMap<String,String>();
item.put(LINE_1, header);
item.put(LINE_2, message);
mData.add(item);
notifyDataSetChanged();
}
public void addImageItem() {
HashMap<String,String> item = new HashMap<String,String>();
item.put(LINE_1, "");
item.put(LINE_2, "");
mData.add(item);
mSeparatorsSet.add(mData.size() - 1);
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
return mSeparatorsSet.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
}
@Override
public int getViewTypeCount() {
return TYPE_MAX_COUNT;
}
public int getCount() {
return mData.size();
}
public Object getItem(int position) {
return mData.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh = null;
int type = getItemViewType(position);
System.out.println("getView " + position + " " + convertView + " type = " + type);
if (convertView == null) {
vh = new ViewHolder();
switch (type) {
case TYPE_ITEM:
convertView = mInflater.inflate(R.layout.instructions_two_row, null);
vh.header = (TextView) convertView.findViewById(R.id.instructions_header);
vh.message = (TextView) convertView.findViewById(R.id.instructions_message);
vh.header.setText((CharSequence) mData.get(position).get(LINE_1));
vh.message.setText((CharSequence) mData.get(position).get(LINE_2));
break;
case TYPE_SEPARATOR:
convertView = mInflater.inflate(R.layout.instructions_image, null);
vh.imageView = (ImageView) convertView.findViewById(R.id.instuct_image);
vh.imageView.setImageDrawable(getResources().getDrawable(R.drawable.instructions));
break;
}
convertView.setTag(vh);
}
else {
vh = (ViewHolder) convertView.getTag();
}
return convertView;
}
}
public static class ViewHolder {
public TextView header;
public TextView message;
public ImageView imageView;
}
Спасибо за помощь всем!