- 新式對話框(AlertDialog類)
- 實現層級式導航
- SQLite數據庫
- 使用
CursorWrapper
新式對話框——AlertDialog
類
將AlertDialog
類封裝在DialogFragment
類中
使用
FregmentManager
管理對話框可以更靈活的顯示對話框。其次,旋轉設備時,單獨的AlertDialog
會消失,而封裝起來的對話框會重建恢復。
fragment
間的數據傳遞
實現同一個
activity
托管的兩個fragment
之間的數據傳遞
實現層級式導航
主要是可以在應用內逐級向上導航。
啟用向上按鈕
<activity
android:name=".CrimePagerActivity"
android:parentActivityName=".CrimeListActivity"/>
切換菜單項標題
工具欄上的子標題顯示后,菜單項標題依然顯示為
SHOW SUBTITLE
。我們需要調用onOptionsItemSelected(MenuItem)
從而更新SHOW SUBTITLE
里的文字。
SQLite數據庫
使用ContentValues
是負責處理數據庫寫入和更新操作的輔助類。它是一個鍵值存儲類,類似于Java的
HashMap
和前面用過的Bundle
。不同的是,ContentValues
只能用于處理SQLite數據。
創建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數據
在onPause()
方法中刷新列表項
@Override
public void onPause() {
super.onPause();
CrimeLab.get(getActivity())
.updateCrime(mCrime);
}
使用CursorWrapper
功能就是封裝數據表中的原始字段值。
創建模型對象
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();
}
}