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>

猜你喜欢

转载自www.cnblogs.com/android-deli/p/10122973.html