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 }));

该列表按预期创建。但是:有时这个列表的条目似乎消失了(有时其中一些仍然可见)。这似乎每次都会发生,当我开始一个新的活动并(立即)回到这个活动时,例如切换到主屏幕然后返回我的活动。但是,这只会发生一次:当再次切换到“相同的其他”活动然后返回时,所有列表条目仍然可见。我检查了列表值,似乎它们是从数据库中正确接收到的,但有些不可见。

有人可以向我解释我做错了什么吗?

4

1 回答 1

0

getView 是类似于Applet 中的paint 方法的方法,ok,getCount 决定,绘制多少数据,即显示在您的ListView 中

在 getCount() 方法和 getItem{int pos)、getItemId() 中指定 List View 的大小

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 回答