手把手帶你擼乙個校園APP(八) 校園通訊錄模組

2021-10-02 22:43:21 字數 3519 閱讀 4737

校園通訊錄功能,收集校園內的公開****等內容,並進行展示。在日常生活中經常可能需要用到。比如 水電處問題了找水電師傅,招生就業辦,學工辦的**等等。

當然,出於隱私考慮,個人手機號不會被收集展示。只展示辦公室****等可在網上或校園內查到的號碼。

校園通訊錄模組旨在打造便捷的校園資訊服務平台,完善校園資訊服務,給校園資訊的管理和維護提供更便捷、更安全的服務系統。

(本文對該模組進行簡易實現,僅講述通訊錄列表樣式的展示)

系列文章

校園通訊錄:

校園通訊錄資料部分比較簡單,總共 姓名稱呼,部門,**** 3個主要字段即可;

通訊錄列表的資料需要排序分組後再顯示;

排序

按照姓名稱呼的首字母拼音排序

==> 需要獲取首字的拼音

==> 通過三方庫 tinypinyin 來實現

分組

可以通過自定義 recycleview 的 itemdecoration 來實現,需要額外處理懸浮窗的顯示情況

右側顯示字母快速索引列表,並關聯 recycleview ,可以關聯滑動

通過自定義控制項來實現

文章:

欄位名描述

型別是否主鍵

objectid

唯一標識

string

是name

姓名稱呼

string

-department

部門string

-tel

****

string

-下面介紹下校園通訊錄模組實現的主要思路:

step 1: 資料排序

依賴 tinypinyin 庫後,對源資料進行加工處理,增加設定 indextag 字段內容。然後依據該欄位進行排序;

public

static

void

sortdata

(list

list)

else

} collections.

sort

(list,

newcomparator

()elseif(

"#".

equals

(o2.

getindextag()

))else}}

);

step 2: 資料分組

資料排序完成後,通過自定義 itemdecoration 來繪製懸浮框及 itemview 之上的分類tag

//用來繪製每個itemview的邊距

@override

public

void

getitemoffsets

(rect outrect,

view view,

recyclerview parent,

recyclerview.state state)

else

if(position >0)

}}//用來繪製最上面的懸浮框

@override

public

void

ondrawover

(canvas canvas,

recyclerview parent,

recyclerview.state state)

//按需繪製itemview上面的分類tag

@override

public

void

ondraw

(canvas canvas,

recyclerview parent,

recyclerview.state state)

else

if(position >0)}}}

step 3: 自定義右側索引view
@override

protected

void

ondraw

(canvas canvas)

}

在ontouchevent處理了滑動事件,當手指上下滑動時左側有個圓跟著滑動,這裡用的自定義indexbar( indexbar extends viewgroup,indexbar包含sidebar )來處理的,當sidebar滑動處於move狀態時通過((indexbar) getparent()).setdrawdata()把一系列位置引數傳到indexbar中去

@override

public

boolean

ontouchevent

(motionevent event)

}break

;case motionevent.action_up:

//抬起

((indexbar)

getparent()

).settagstatus

(false);

mpaint.

setcolor

(color.gray)

;invalidate()

;break;}

return

true

;}

主要是在onlayout中把sidebar排列到最右側,並在ondraw中根據sidebar傳過來的一系列位置引數來不斷改變圓的位置,

這裡要注意一下,自定義viewgroup的ondraw()方法預設是不會呼叫的,如果想執行ondraw方法,可以通過下面兩種方法:

1.設定透明背景:

在建構函式中:setbackgroundcolor(color.transparent);

或者在xml中:android:background="@color/transparent"

2.或者可以在建構函式中新增setwillnotdraw(false);

@override

protected

void

onlayout

(boolean changed,

int l,

int t,

int r,

int b)

@override

protected

void

ondraw

(canvas canvas)

}

step 4: 關聯recycleview
sidebar.

setindexchangelistener

(new

sidebar.indexchangelistener()

}}})

;

如果本文對你有所幫助,還望可以隨手賞乙個點讚哈 ~ ~

手把手帶你實現乙個mini版jquery

我們要實現的功能如下 amd模組檢測if typeof define function define.amd 執行結構 var jquery function window,undefined window 對dom集合進行儲存,生成jquery物件 function query dom,selec...

手把手帶你實現乙個可用的單點登入系統

怎麼能夠快速實現乙個 sso 系統,這是很多在企業裡開發登入模組的朋友經常遇到的問題。中文網路上有太多的討論,但能夠引導大家真正去實現乙個 sso 系統的卻鳳毛麟角。本文立足於 sso 系統的實現,只講實現,不扯概念,幫助大家構建出乙個可用的 sso 系統。本場 chat 您將收穫 了解乙個 sso...

手把手帶你開發乙個前端命令列工具

命令列工具,即cli command line inte ce 是在圖形使用者介面得到普及之前使用最為廣泛的使用者介面,它通常不支援滑鼠,使用者通過鍵盤輸入指令,計算機接收到指令後,予以執行。在學習這篇教程之前,我們需要先了解nodejs,npm和一些常用的shell命令相關知識點。那怎樣才可以從0...