学习笔记之CursorAdapter-创新互联

CursorAdapter:通过该类可以用Cursor的方式访问数据库,并将查询出来的数据展示到列表视图(ListView)部件上。其中游标携带的结果集中必须有列名为“_id”的列,否则这个类无法工作。

创新互联建站从2013年创立,先为庆城等服务建站,庆城等地企业,进行企业商务咨询服务。为庆城企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

sqlite查询获得Cursor,可以通过CursorAdapter将数据方便的显示在listview上.

使用方法:与BaseAdapter类似,需要重写CursorAdapter中的一些方法

下面用伪代码演示主要步骤:


CursorAdapter:

1.继承适配器:

class Myadapter extends CursorAdapter

2.构造函数://需要传入上下文,游标对象,用于遍历数据

public Myadapter(Context context, Cursor c) {

super(context, c);

}

2.newView():

inflate行布局

3.bindView()

在行布局中显示当前cursor所指向的数据


listview:

1.获得listview实例

ListView listview = findviewbyid(R.id.listview);

2.设置适配器

listview.setAdapter(myadapter);//cursor = db.query();

                //myadapter = new Myadapter(this,cursor)


几点思考:

1.学完CursorAdapter后,想起之前学习BaseAdapter时候的优化,便想对其也进行优化,发现CursorAdapter中并没有convertview,而且其将getView分成了newView和bindView,百思不得其解.百度之后才发现,原来系统已经帮我们做了一步优化,其内部代码

public View getView(int position, View convertView, ViewGroup parent) {
    if (!mDataValid) {
        throw new IllegalStateException("this should only be called when the cursor is valid");
    }
    if (!mCursor.moveToPosition(position)) {
        throw new IllegalStateException("couldn't move cursor to position " + position);
    }
    View v;
    if (convertView == null) {
        v = newView(mContext, mCursor, parent);
    } else {
        v = convertView;
    }
    bindView(v, mContext, mCursor);
    return v;
}

当convertView==null的时候才去调用newView.

2.如何获得id?

记得CursorAdapter要求我们必须以_id作为主键不?系统帮我们把_id通过getItemId()返回,再传递到一些对象方法中,如:

listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view,
                    int position, long id) {
                db.delete("contact", "_id=?", new String[]{String.valueOf(id)});
                Cursor cursor = db.query("contact", null, null, null, null, null, null);
                myadapter.changeCursor(cursor);
                myadapter.notifyDataSetChanged();
                Log.e("id", id+"");
            }
        });

代码为删除listview点击行显示的表"contact"的数据.long id 即为系统帮我们传递过来的_id.这是通过getItemId()返回的,若要修改id,可以重写此方法.

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站题目:学习笔记之CursorAdapter-创新互联
网站链接:http://ybzwz.com/article/hiddp.html