Android 簡易手機通訊錄(原始碼)
阿新 • • 發佈:2018-12-28
簡易手機通訊錄
一:功能模組
1.主介面,通過listview 展示所有聯絡人資訊,並在沒有聯絡人時給出友好提示
2.主介面.顯示最近檢視的某個聯絡人資訊
3.主介面,可以長按某聯絡人項,彈出選單,刪除該聯絡人;刪除聯絡人後,在手機通知欄彈出資訊給使用者提示
4.主介面選擇分組,可以檢視所有聯絡人,也可以只檢視某一分組的聯絡人
5.點選主介面的某聯絡人,可以進入聯絡人詳情介面,檢視聯絡人各詳細資訊,並可修改聯絡人各資訊;
聯絡人的性別和所在分組可通過下拉選單選擇;長按電話號碼,可以進入撥打電話功能;
修改聯絡人資訊後,跳轉回到主介面,並使用
6.主介面選單欄可以新增新聯絡人,關於等功能
7.能在聯絡人詳情介面,動態增加多個聯絡電話,並儲存到資料庫中
效果圖展示:
原始碼下載地址:
專案回顧:
1.scrollview巢狀listview產生的滑動衝突(recyclerview)
解決方案:
listView.setOnTouchListener(new View.OnTouchListener() { @Overridepublic boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_UP){ //點選listview裡面滾動停止時,scrollview攔截listview的觸屏事件,就是scrollview該滾動了 scrollView.requestDisallowInterceptTouchEvent(false); }else{//當listview在滾動時,不攔截listview的滾動事件;就是listview可以滾動, scrollView.requestDisallowInterceptTouchEvent(true); } return false; } });
2.關於listview 中 EditText 監聽
//1.在設定text前,先移除監聽 if (viewHodler.number.getTag() instanceof TextWatcher) { viewHodler.number.removeTextChangedListener((TextWatcher) viewHodler.number.getTag()); } if (TextUtils.isEmpty(phoneNumber.getNumber())){ viewHodler.number.setText(""); }else { viewHodler.number.setText(phoneNumber.getNumber()); } //2.新建監聽類 TextWatcher watcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if (TextUtils.isEmpty(s)) { phoneNumber.setNumber(null); finalViewHodler.imageView.setVisibility(View.GONE); } else { phoneNumber.setNumber(s.toString()); finalViewHodler.imageView.setVisibility(View.VISIBLE); } Log.e("tag", "afterTextChanged: " +s.toString() ); } }; //3.新增監聽器 viewHodler.number.addTextChangedListener(watcher); viewHodler.number.setTag(watcher);
3.獲取listview 中所有 Editext 的值
思路:在介面卡中建立HashMap 在getview()方法中 儲存所有的Editext key = position value = editext
然後在通過HashMap 獲取就行了
private HashMap<Integer,EditText> edMap; @Override public View getView(final int position, View convertView, ViewGroup parent) { PhoneAdapter.ViewHodler viewHodler = null; if (convertView == null) { viewHodler = new PhoneAdapter.ViewHodler(); convertView = LayoutInflater.from(context).inflate(R.layout.phone_list_item, null, false); viewHodler.spinner = convertView.findViewById(R.id.pnone_spinner); viewHodler.number = convertView.findViewById(R.id.pnone_number); viewHodler.imageView = convertView.findViewById(R.id.imageView4); //put 儲存 edMap.put(position,viewHodler.number); spMap.put(position,viewHodler.spinner); convertView.setTag(viewHodler); } else { viewHodler = (PhoneAdapter.ViewHodler) convertView.getTag(); edMap.put(position,viewHodler.number); spMap.put(position,viewHodler.spinner); }
4.撥打電話功能的坑
public void call(String telPhone){ if(checkReadPermission(Manifest.permission.CALL_PHONE,REQUEST_CALL_PERMISSION)){ //要在telPhone前加上字串tel: Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + telPhone)); startActivity(intent); } }
不讓你就會見到下圖: