CriminalIntent項目總結之12~14章

  • 新式對話框(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();
        }
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,155評論 25 708
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,223評論 4 61
  • 為CriminalIntent應用添加對話框 對話框既能引起用戶的注意也可以接收用戶的輸入,為其添加對話框,以便用...
    YTY尹尹尹閱讀 708評論 0 0
  • 刪掉的人可能曾經有過幾百頁暢談的聊天記錄;街上碰見了也不打招呼的人可能曾經也樂此不疲地整天膩在一起過。那一刻,揣著...
    MOKY莫閱讀 319評論 1 0
  • 為什么聊天時缺乏自信、能量、精力,如何改變? 1.提升聊天時的自信。2.學會聊天的方法套路。3.科學有效的訓練積累...
    徐夢晗閱讀 1,200評論 0 1