zoukankan      html  css  js  c++  java
  • Android -- CursorAdapter

    CursorAdapter                                                                       

    CursorAdapter继承于BaseAdapter,它是个虚类,它为cursor和ListView提供了连接的桥梁。  

    public abstract class CursorAdapter extends BaseAdapter

    注意cursor的必须要有个命名为"_id"的列。比如Contacts._ID就为"_id"

    必须实现以下函数:

    abstract View newView(Context  context, Cursor  cursor, ViewGroup  parent)
        
    abstract void  bindView(View  view, Context  context, Cursor  cursor)

    newView该函数第一次回调用后,如果数据增加后也会再调用,但是重绘是不会调用的
    数据增加后,回调用该函数来生成与新增数据相对应的view。
    bindView函数第一次回调用后,如果数据更新也会再调用,但重绘会再次调用的

    总的来说应该是在调用bindView如果发现view为空会先调用newView来生成view。

    Code                                                                                   

    public class MySqliteOpenhelper extends SQLiteOpenHelper 
    {                                                                    
        public MySqliteOpenhelper(Context context,  int version) 
        { 
            super(context, "dianhuaben.db", null, version); 
        } 
        @Override
        public void onCreate(SQLiteDatabase db) 
        {//注意:使用CursorAdapter时,创建表必须有以_id为列名的列 
            String sql = "CREATE TABLE dhb (_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),phone VARCHAR(20))"; 
            db.execSQL(sql); 
        } 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        { 
        } 
    }
    public void createCursorAdapter(Cursor cursor) 
        { //游标适配器,构造方法,传入cursor 
            mAdapter = new CursorAdapter(this, cursor) 
            {//重写两个方法 
                @Override
                public View newView(Context context, Cursor cursor, ViewGroup parent) 
                {//找到布局和控件 
                    ViewHolder holder = new ViewHolder(); 
                    LayoutInflater inflater = getLayoutInflater(); 
                    View inflate = inflater.inflate(R.layout.listview_item, null); 
                    holder.item_tv_name = (TextView) inflate.findViewById(R.id.item_tv_name); 
                    holder.item_tv_phone = (TextView) inflate.findViewById(R.id.item_tv_phone); 
                    inflate.setTag(holder); 
                    return inflate;//返回的view传给bindView。 
                } 
                                                                  
                @Override
                public void bindView(View view, Context context, Cursor cursor) 
                {
    //                把数据设置到界面上 
                    ViewHolder holder = (ViewHolder) view.getTag(); 
                    String name = cursor.getString(cursor.getColumnIndex("name")); 
                    String phone = cursor.getString(cursor.getColumnIndex("phone")); 
                    holder.item_tv_name.setText(name); 
                    holder.item_tv_phone.setText(phone); 
                } 
                                                              
            }; 
                                                        
        };

    SimpleCursorAdapter                                                                

    简单提及一下

    public void createSimpleCursorAdapter(Cursor cursor) 
        {// SimpleCursorAdapter继承了CursorAdapter继承了BaseAdapter 
            String[] from = {TABLE_NAME_NAME,TABLE_NAME_PHONE};//列名与控件id一一对应 
            int[] to = {R.id.item_tv_name,R.id.item_tv_phone}; 
            //用的是SimpleCursorAdapter,用法和simpleAdapter相似 
            mAdapter = new SimpleCursorAdapter(MainActivity.this, R.layout.listview_item, cursor, from, to); 
        }

    使用SimpleCursorAdapter,时,创建表必须有以_id为列名的列

    我是天王盖地虎的分割线                                                             

  • 相关阅读:
    ASP.NET MVC案例——————拦截器
    Windows Azure Virtual Network (10) 使用Azure Access Control List(ACL)设置客户端访问权限
    Windows Azure Storage (20) 使用Azure File实现共享文件夹
    Windows Azure HandBook (5) Azure混合云解决方案
    Windows Azure Service Bus (6) 中继(Relay On) 使用VS2013开发Service Bus Relay On
    Azure PowerShell (9) 使用PowerShell导出订阅下所有的Azure VM的Public IP和Private IP
    Windows Azure Service Bus (5) 主题(Topic) 使用VS2013开发Service Bus Topic
    Azure China (9) 在Azure China配置CDN服务
    Windows Azure Storage (19) 再谈Azure Block Blob和Page Blob
    Windows Azure HandBook (4) 分析Windows Azure如何处理Session
  • 原文地址:https://www.cnblogs.com/yydcdut/p/4090723.html
Copyright © 2011-2022 走看看