我有一个类扩展了一个`SimpleCursorAdapter。
public class MyAdapter extends SimpleCursorAdapter {
private Cursor cursor;
private LayoutInflater inflater;
private int columnIndexRowID;
private int columnIndexFromAddrString;
private int columnIndexToAddrString;
public LastRequestsAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
this.cursor = c;
this.inflater = LayoutInflater.from(context);
this.columnIndexRowID = c.getColumnIndex(MyDBAdapter.KEY_ROWID);
this.columnIndexFromAddrString = c
.getColumnIndex(MyDBAdapter.KEY_FROM_ADDR_STRING);
this.columnIndexToAddrString = c
.getColumnIndex(MyDBAdapter.KEY_TO_ADDR_STRING);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView==null){
convertView = this.inflater.inflate(R.layout.main_activity_last_request_row, null);
viewHolder = new ViewHolder();
viewHolder.id = -1;
viewHolder.fromAddr = (TextView) convertView.findViewById(R.id.from);
viewHolder.toAddr =(TextView) convertView.findViewById(R.id.to);
viewHolder.arrow = (ImageView) convertView.findViewById(R.id.last_request_arrow);
convertView.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) convertView.getTag();
}
this.cursor.moveToPosition(position);
viewHolder.id = this.cursor.getInt(columnIndexRowID);
viewHolder.fromAddr.setText(this.cursor.getString(this.columnIndexFromAddrString));
viewHolder.toAddr.setText(this.cursor.getString(this.columnIndexToAddrString));
viewHolder.arrow.setImageResource(R.drawable.arrow_alt);
return convertView;
}
public class ViewHolder{
public int id;
public TextView fromAddr;
public TextView toAddr;
public ImageView arrow;
}
}
它是这样使用的:
listView.setAdapter(new MyAdapter(this,
R.layout.main_activity_last_request_row, dbCursor,
new String[] { MyDBAdapter.KEY_FROM_ADDR_STRING,
MyDBAdapter.KEY_TO_ADDR_STRING }, new int[] {
R.id.from, R.id.to }));
该列表按预期创建。但是:有时这个列表的条目似乎消失了(有时其中一些仍然可见)。这似乎每次都会发生,当我开始一个新的活动并(立即)回到这个活动时,例如切换到主屏幕然后返回我的活动。但是,这只会发生一次:当再次切换到“相同的其他”活动然后返回时,所有列表条目仍然可见。我检查了列表值,似乎它们是从数据库中正确接收到的,但有些不可见。
有人可以向我解释我做错了什么吗?