android最佳實踐(四)

wo7788945 8年前發布 | 18K 次閱讀 安卓開發 Android開發 移動開發

來自: https://segmentfault.com/a/1190000004420355

這是一個系列,我們將其命名為android最佳實踐,如果你還沒有看之前的文章:

Android最佳實踐(一)

android最佳實踐(二)

android最佳實踐(三)

大家可能在做app的時候,或多或少需要使用聯系人,而根據google提供的api,你需要編寫大量的代碼,例如首先需要查詢數據庫,涉及到數據庫表和字段以及對應的SQL語句。

那么我們是否可以在我們的項目中添加聯系人模塊,這樣能夠更方便的使用手機聯系人呢,答案是肯定的,并將其作為一個獨立的模塊,這樣在你的其他app中,你都可以引入該模塊,或者你能夠將該模塊上傳到maven庫,方便大家的使用。

那么先來看看效果吧:

首先是將來涉及到的各個模塊的item。

然后是單個模塊中的各個測試:

比如我們現在需要的是原生app中內置的應用,你需要點擊聯系人按鈕,或者是你需要自定義界面,你點擊聯系人自定義UI按鈕。

這是當你選擇的是自定義聯系人,然后選擇的聯系人有多個電話的時候,你需要選擇:

返回結果是:

是不是很簡單,那么我們是怎么實現的呢:

封裝后的代碼調用

在此,我展現下我的代碼編寫風格,你需要為按鈕添加點擊事件,比如聯系人按鈕,當點擊聯系人按鈕:

   ContactFactory.newContact(this).getContacts();

調用工廠類ContactFactory中的靜態newContact方法,然后調用getContacts方法,就可以實現針對系統原生app中的內置聯系人的操作。

大家都應該知道,當你在聯系人中操作完,比如選擇聯系人完成后,你需要針對當前選擇的id進行第二次查詢操作,這個時候,我們接收數據是重寫onActivityResult方法。

而如果你在fragment中調用了startActivityForResult方法,你需要在你的該fragment類中重寫onActivityResult,這樣才能正確的接收數據。

因此,在封裝完成后,你僅僅需要在你調用getContacts后,重寫該類的onActivityResult方法,然后在該類中調用:

ContactFactory.newContact(this).onActivityResult(requestCode, resultCode, data, new ContactCallback() {
            @Override
            public void onSuccess(@NonNull String contactNumber, @NonNull String contactName) {
                mText.setText(contactName + contactNumber);
            }

        @Override
        public void onFailed(@NonNull int errCode, @NonNull String message) {
            mText.setText(errCode + message);
        }
    });
    </pre> 

你需要有一個匿名內部類,其會返回onSuccess和onFailed方法,然后針對聯系人和電話號碼,你可以做相關的展示。

封裝后總結

在你某個activity類或者fragment中調用:

  ContactFactory.newContact(this).getContacts();
  

在該類中重寫方法:

ContactFactory.newContact(this).onActivityResult(requestCode, resultCode, data, null);

總結

我覺得針對聯系人的封裝還是很有必要的,然后大家也可以通過 https://github.com/neuyu/android-best-practices/tree/master/app 查看相關源碼,歡迎star和fork,后期會將單獨的模塊上傳到maven庫,方便大家使用,同時也希望大家能夠給相關模塊的開發提供寶貴的建議,謝謝大家指正。

</div>

 本文由用戶 wo7788945 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!