0

`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回だけ発生します。「同じ他の」アクティビティに再度切り替えてから戻ると、すべてのリストエントリが引き続き表示されます。リストの値を確認しましたが、データベースから正しく受信されているようですが、ある種の不可視です。

誰かが私に何が間違っているのか説明できますか?

4

1 に答える 1

0

getView は、アプレットの paint メソッドに似たメソッドです。わかりました。getCount は、ペイントされるデータの量を決定します。つまり、ListView に表示されます。

getCount() メソッドと getItem{int pos), getItemId() でリスト ビューのサイズを指定します。

public int getCount() {
    return array.length; 

// ForInstance i had an array 
//which contains 5 elements, i want that % elements in List, that's why i had specified the array.length here

}

public Object getItem(int arg0) {
    return arg0;
}

public long getItemId(int arg0) {
    return arg0;
}
于 2011-02-04T17:39:19.900 に答える