- 新式对话框(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();
}
}
网友评论