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

来源:互联网 发布:单桂敏淘宝哪个真的 编辑:程序博客网 时间:2024/06/08 15:17

我们通过读代码知道,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);    }

最终效果如下

源代码稍后上传。



0 0
原创粉丝点击