JamesMusic浅读--------2,ListViewCardsAdapter和数据库初显

我们通过读代码知道,ListViewFragment里面的ListView的Adapter是通过绑定数据库显示数据的。

首先我们先简单实现一下数据库类。

/**
 * Created by kankan on 2016/5/25.
 */
public class DBAccessHelper  extends SQLiteOpenHelper{

    //Writable database instance.
    private SQLiteDatabase mDatabase;

    public DBAccessHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE  TABLE addressbook23d (_id INTEGER PRIMARY KEY , name VARCHAR, phone VARCHAR)");//执行有更改的sql语句
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    public Cursor testDbRawQuery() {
        SQLiteDatabase sqLiteDatabase = getWritableDatabase();
         Cursor cursor =    sqLiteDatabase.rawQuery("SELECT * FROM addre",null);
        return  cursor;
    }

    /**
     * Returns a writable instance of the database. Provides an additional
     * null check for additional stability.
     */
    private synchronized SQLiteDatabase getDatabase() {
        if (mDatabase==null)
            mDatabase = getWritableDatabase();

        return mDatabase;
    }
}

就是一个SqlLiteOpenHelper的类。这样我们就有数据提供了。

接下来写ListViewCardsAdapter来显示数据。

/**
 * Created by kankan on 2016/5/24.
 */
public class ListViewCardsAdapter extends SimpleCursorAdapter {

    private Context mContext;
    private Common mApp;
    private ListViewFragment mListViewFragment;
    public static ListViewHolder mHolder = null;

    private HashMap<Integer, String> mDBColumnsMap;
    public static final int TITLE_TEXT = 0;
    public static final int SOURCE = 1;
    public static final int FILE_PATH = 2;
    public static final int ARTWORK_PATH = 3;
    public static final int FIELD_1 = 4; //Empty fields for other
    public static final int FIELD_2 = 5;
    public static final int FIELD_3 = 6;
    public static final int FIELD_4 = 7;
    public static final int FIELD_5 = 8;
    private String mName = "";
    public ListViewCardsAdapter(Context context, ListViewFragment listViewFragment,
                                HashMap<Integer, String> dbColumnsMap) {

        super(context, -1, listViewFragment.getCursor(), new String[] {}, new int[] {}, 0);
        mContext = context;
        mListViewFragment = listViewFragment;
        mApp = (Common) mContext.getApplicationContext();
        mDBColumnsMap = dbColumnsMap;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Cursor c = (Cursor) getItem(position);
        if(convertView == null){
            convertView = LayoutInflater.from(mContext).inflate(R.layout.list_view_item, parent, false);

            mHolder = new ListViewHolder();
            mHolder.leftImage = (ImageView) convertView.findViewById(R.id.listViewLeftIcon);
            mHolder.titleText = (TextView) convertView.findViewById(R.id.listViewTitleText);
            mHolder.subText = (TextView) convertView.findViewById(R.id.listViewSubText);
            mHolder.rightSubText = (TextView) convertView.findViewById(R.id.listViewRightSubText);
            mHolder.overflowIcon = (ImageButton) convertView.findViewById(R.id.listViewOverflow);
            mHolder.subTextParent = (RelativeLayout) convertView.findViewById(R.id.listViewSubTextParent);
            convertView.setTag(mHolder);


        }else {
            mHolder = (ListViewHolder) convertView.getTag();
        }

        //Retrieve data from the cursor.
        String titleText = "";
        String source = "";
        String filePath = "";
        String artworkPath = "";
        String field1 = "";
        String field2 = "";
        String field3 = "";
        String field4 = "";
        String field5 = "";

        titleText = c.getString(c.getColumnIndex("name"));
        convertView.setTag(R.string.title_text, titleText);
        //Set the title text in the ListView.
        mHolder.titleText.setText(titleText);
        // TODO: 2016/5/25  测试代码
        Typeface tf = Typeface.createFromAsset(mContext.getAssets(), "fonts/Roboto-Light.ttf");
        mHolder.titleText.setTextColor(Color.BLUE);
        mHolder.titleText.setTypeface(tf);
        return convertView;
    }

    /**
     * Holder subclass for ListViewCardsAdapter.
     *
     * @author Saravan Pantham
     */
    static class ListViewHolder {
        public ImageView leftImage;
        public TextView titleText;
        public TextView subText;
        public TextView rightSubText;
        public ImageButton overflowIcon;
        public RelativeLayout subTextParent;

    }
}


这个类很简单,就是继承了SimpleCursorAdapter的Adapter重写View将数据显示出来。

接下来咱们在ListViewFragment里面将这个数据显示绑定到数据库里面就行了。

   DBAccessHelper helper;
    SQLiteDatabase sqldb;
    void testDbHelper(){
         helper  = new DBAccessHelper(mContext, "sql23.db", null, 1);
       // mCursor = helper.testDbRawQuery();
        ContentValues cv =new ContentValues();
        sqldb = helper.getWritableDatabase();
        cv.put("name", "hk");
        cv.put("phone", "20050519");
        // name和phone为列名
        long res = sqldb.insert("addressbook23d", null, cv);// 插入数据
        if (res == -1) {
            Toast.makeText(mContext, "添加失败",
                    Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(mContext, "添加成功",
                    Toast.LENGTH_SHORT).show();
        }

        mCursor = sqldb.rawQuery("SELECT * FROM addressbook23d",null);
        mListViewAdapter = new ListViewCardsAdapter(mContext, mFragment, mDBColumnsMap);
        mListView.setAdapter(mListViewAdapter);
    }

最终效果如下

源代码稍后上传。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值