• Android-ListView-CursorAdapter


    在上篇博客,Android-ListView-SimpleCursorAdapter,中介绍了SimpleCurosrAdapter的使用操作(SimpleCursorAdapter是简单便捷Cursor数据处理的适配器,内部都已经封装好了),而CursorAdapter是属于自定义适配器范畴,虽然没有SimpleCursorAdapter那么方便,但灵活性比SimpleCursorAdapter要灵活些

    在上篇博客,Android-ListView-(BaseAdapter初步)Android-ListView-(BaseAdapter使用),中介绍了BaseAdapter的使用操作等(BaseAdapter是对很多数据类型进行适配),而CursorAdapter是专门给Cursor数据进行适配的

    BaseAdapter是CursorAdapter的父类

    BaseAdapter是SimpleCursorAdapter的父类

     


    定义 MyCursorAdapter适配器

    package liudeli.cp.client.adapter;
    
    import android.app.LoaderManager;
    import android.content.Context;
    import android.content.CursorLoader;
    import android.database.Cursor;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.CursorAdapter;
    import android.widget.TextView;
    
    import liudeli.cp.client.R;
    
    public class MyCursorAdapter extends CursorAdapter {
    
        // 定义布局加载器
        private LayoutInflater layoutInflater;
    
        /**
         * 构造方法
         * @param context 传入上下文
         * @param c 传入Cursor游标
         * @param flags 传入标记
         */
        public MyCursorAdapter(Context context, Cursor c, int flags) {
    
            /**
             * 主要把这些值传递给父类的构造方法,就会自动的传递到 newView(Context context, Cursor cursor, ViewGroup parent)
             *                                              bindView(View view, Context context, Cursor cursor)
             */
            super(context, c, flags);
    
            layoutInflater = LayoutInflater.from(context);
        }
    
        /**
         * Item布局文件的处理
         * @param context 传入上下文
         * @param cursor
         * @param parent
         * @return
         */
        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            // Item布局文件,要显示的Item,在这里处理
            View view = layoutInflater.inflate(R.layout.layout_item, null);
            return view;
        }
    
        /**
         * 把Cursor获取的数据和布局文件进行绑定
         * @param view 此view 是上面 newView方法返回的View
         * @param context 上下文
         * @param cursor 游标
         */
        @Override
        public void bindView(View view, Context context, Cursor cursor) {
            // 获取到布局的控件
            TextView tvId =  view.findViewById(R.id.tv_id);
            TextView tvName = view.findViewById(R.id.tv_name);
            TextView tvAge = view.findViewById(R.id.tv_age);
    
            // 获取Cursor里面的数据
            int _id = cursor.getInt(cursor.getColumnIndex("_id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            int age = cursor.getInt(cursor.getColumnIndex("age"));
    
            // 把数据绑定到控件里面去
            tvId.setText(_id + ""); // setText(数据必须是字符串);
            tvName.setText(name); // setText(数据必须是字符串);
            tvAge.setText(age + ""); // setText(数据必须是字符串);
        }
    }

    Java代码使用CursorAdapter适配器

      /**
         * 查询
         */
        public void query(View view) {
            cursor = contentResolver.query(uri,
                    new String[]{"_id", "name", "age"},
                    null, null
                    , null, null);
    
            /**
             * 使用CursorAdapter 适配器
             */
            CursorAdapter adapter = new MyCursorAdapter(this, cursor, CursorAdapter.IGNORE_ITEM_VIEW_TYPE);
    
            // 给ListView设置适配器
            listview.setAdapter(adapter);
    
        }

    Item布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp">
    
        <TextView
            android:id="@+id/tv_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="id"
            android:textColor="@android:color/black"
            />
    
        <TextView
            android:id="@+id/tv_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="name"
            android:textColor="@android:color/black"
            android:layout_marginTop="5dp"
            />
    
        <TextView
            android:id="@+id/tv_age"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="age"
            android:textColor="@android:color/black"
            android:layout_marginTop="5dp"
            />
    
    
    </LinearLayout>

  • 相关阅读:
    LINQ N~layer!
    CodeSmith 破解和注册
    鼠标划过链接时弹出窗口
    ajax的loading显示在gridview的位置
    Asp.net与SQL一起打包部署安装
    编译apache报错 No recognized SSL/TLS toolkit detected
    ubuntu12.04 卸载和安装mysql
    Ubuntu12.04 英文环境下使用ibus输入中文并自动启动输入法
    Ubuntu11.10 源码编译安装PHP5.3.8 [转]
    debian 下 编译安装 mysql 二进制文件
  • 原文地址:https://www.cnblogs.com/android-deli/p/10122973.html
Copyright © 2020-2023  润新知