`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 }));
リストは期待どおりに作成されます。ただし、このリストのエントリが表示されない場合があります(一部のエントリはまだ表示されている場合があります)。これは、新しいアクティビティを開始して(すぐに)このアクティビティに戻るたびに発生するようです。たとえば、ホーム画面に変更してからアクティビティに戻ります。ただし、これは1回だけ発生します。「同じ他の」アクティビティに再度切り替えてから戻ると、すべてのリストエントリが引き続き表示されます。リストの値を確認しましたが、データベースから正しく受信されているようですが、ある種の不可視です。
誰かが私に何が間違っているのか説明できますか?