簡易手機通訊錄
一:功能模塊
1.主界面,通過listview 展示所有聯系人信息,並在沒有聯系人時給出友好提示
2.主界面.顯示最近查看的某個聯系人信息
3.主界面,可以長按某聯系人項,彈出菜單,刪除該聯系人;刪除聯系人后,在手機通知欄彈出信息給用戶提示
4.主界面選擇分組,可以查看所有聯系人,也可以只查看某一分組的聯系人
5.點擊主界面的某聯系人,可以進入聯系人詳情界面,查看聯系人各詳細信息,並可修改聯系人各信息;
聯系人的性別和所在分組可通過下拉菜單選擇;長按電話號碼,可以進入撥打電話功能;
修改聯系人信息后,跳轉回到主界面,並使用Toast給予用戶提示
6.主界面菜單欄可以添加新聯系人,關於等功能
7.能在聯系人詳情界面,動態增加多個聯系電話,並儲存到數據庫中
效果圖展示:
源碼下載地址:
https://download.csdn.net/download/qq_35471409/10884060
項目回顧:
1.scrollview嵌套listview產生的滑動沖突(recyclerview)
解決方案:
listView.setOnTouchListener(new View.OnTouchListener() { @Override public 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); } }
不讓你就會見到下圖: