- 新式對(duì)話框(AlertDialog類)
- 實(shí)現(xiàn)層級(jí)式導(dǎo)航
- SQLite數(shù)據(jù)庫
- 使用
CursorWrapper
新式對(duì)話框——AlertDialog
類
將AlertDialog
類封裝在DialogFragment
類中
使用
FregmentManager
管理對(duì)話框可以更靈活的顯示對(duì)話框赠堵。其次天试,旋轉(zhuǎn)設(shè)備時(shí)次员,單獨(dú)的AlertDialog
會(huì)消失鲫骗,而封裝起來的對(duì)話框會(huì)重建恢復(fù)捏境。
fragment
間的數(shù)據(jù)傳遞
實(shí)現(xiàn)同一個(gè)
activity
托管的兩個(gè)fragment
之間的數(shù)據(jù)傳遞
實(shí)現(xiàn)層級(jí)式導(dǎo)航
主要是可以在應(yīng)用內(nèi)逐級(jí)向上導(dǎo)航哗蜈。
啟用向上按鈕
<activity
android:name=".CrimePagerActivity"
android:parentActivityName=".CrimeListActivity"/>
切換菜單項(xiàng)標(biāo)題
工具欄上的子標(biāo)題顯示后,菜單項(xiàng)標(biāo)題依然顯示為
SHOW SUBTITLE
借笙。我們需要調(diào)用onOptionsItemSelected(MenuItem)
從而更新SHOW SUBTITLE
里的文字俺泣。
SQLite數(shù)據(jù)庫
使用ContentValues
是負(fù)責(zé)處理數(shù)據(jù)庫寫入和更新操作的輔助類。它是一個(gè)鍵值存儲(chǔ)類完残,類似于Java的
HashMap
和前面用過的Bundle
伏钠。不同的是,ContentValues
只能用于處理SQLite數(shù)據(jù)谨设。
創(chuàng)建ContentValues
private static ContentValues getContentValues(Crime crime) {
ContentValues values = new ContentValues();
values.put(CrimeTable.Cols.UUID,crime.getId().toString());
values.put(CrimeTable.Cols.TITLE,crime.getTitle());
values.put(CrimeTable.Cols.DATE,crime.getDate().toString());
values.put(CrimeTable.Cols.SOLVED,crime.isSolved()?1:0);
values.put(CrimeTable.Cols.SUSPECT,crime.getSuspect());
return values;
}
插入和更新記錄
public void addCrime(Crime c) {
ContentValues values = getContentValues(c);
mDataBase.insert(CrimeTable.NAME,null,values);
}
public void updateCrime(Crime crime) {
String uuidString = crime.getId().toString();
ContentValues values = getContentValues(crime);
mDataBase.update(CrimeTable.NAME,values,
CrimeTable.Cols.UUID+" = ?",
new String[] { uuidString });
}
刷新Crime數(shù)據(jù)
在onPause()
方法中刷新列表項(xiàng)
@Override
public void onPause() {
super.onPause();
CrimeLab.get(getActivity())
.updateCrime(mCrime);
}
使用CursorWrapper
功能就是封裝數(shù)據(jù)表中的原始字段值熟掂。
創(chuàng)建模型對(duì)象
private CrimeCursorWrapper queryCrimes(String whereClause,String[] whereArgs) {
Cursor cursor = mDataBase.query(CrimeTable.NAME,null,whereClause,whereArgs,null,null,null);
return new CrimeCursorWrapper(cursor);
}
public List<Crime> getCrimes() {
List<Crime> crimes = new ArrayList<>();
CrimeCursorWrapper cursor = queryCrimes(null,null);
try{
cursor.moveToFirst();
while(!cursor.isAfterLast()) {
crimes.add(cursor.getCrime());
cursor.moveToNext();
}
}finally {
cursor.close();
}
return crimes;
}
public Crime getCrime(UUID id) {
CrimeCursorWrapper cursor = queryCrimes(
CrimeTable.Cols.UUID+" =? ",
new String[] { id.toString() });
try{
if (cursor.getCount() == 0) {
return null;
}
cursor.moveToFirst();
return cursor.getCrime();
}finally {
cursor.close();
}
}