我们通过读代码知道,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);
}
最终效果如下
源代码稍后上传。
,