簡易搜尋功能小記

2022-03-06 01:27:05 字數 2591 閱讀 1744

簡易搜尋功能小記

自從上個版本軟體中加入了列表的搜尋功能,現在是個列表的地方產品都要給提供搜尋。

@_@
類似聯絡人、簡訊或者檔案等的集合資料,使用者輸入關鍵字,然後根據標題或者內容文字去匹配。

搜尋功能第一步就是處理使用者輸入,然後發起搜尋。

有兩種:

類似網頁中常見的搜尋功能,在輸入關鍵字過程中會即時顯示對應的搜尋結果,無需等待輸入完畢後主動發起搜尋。

這種情況下,本地搜尋,或者網路情況很好時體驗還不錯,但是,每次搜尋都很耗時的話,輸入過程中的搜尋很可能就沒有多少——建議了。

在監聽輸入框的變化時,可以避免短時間快速輸入時文字變動發起不必要的搜尋——因為搜尋結果使用者甚至來不及看,如果搜尋是同步的話,那麼結果的顯示就會阻塞輸入,或者快速輸入過程中使用者看到列表的閃爍。。。

所以,輸入過程中進行自動搜尋,需要乙個延遲進行搜尋的效果。

**不複雜,但是算是乙個輸入體驗的小細節:

//監聽edittext的變化,使用handler延遲400毫秒後對搜尋邏輯進行發起

ontextchanged(...)

//handlemessage(message msg...)

}

因為整個過程是在主線程中進行的,無需任何同步,通過handler進行延遲決定是否發起搜尋,可以實現快速輸入時——兩次輸入字元間隔在400毫秒內——不搜尋。

以網路請求伺服器搜尋結果為例,從ui一致性的角度——搜尋結果應該是使用者最後輸入的關鍵字對應的結果

所以只有最好的網路請求需要更新資料和ui,因為總是需要對最新的搜尋進行響應,非同步搜尋的方案就是——每次新的請求發出,就取消上乙個搜尋請求。

volley中的網路請求抽象為兩種狀態:pending和flying。所以上乙個搜尋請求可能還未實際被發出,或者是在等待伺服器響應中。無論哪種情況——舊的請求是一定被取消掉的。

類似volley這樣的網路框架提供了很好的api去取消已發出的網路請求——這樣其結束處理也就自然消失了。其它情況下,自己通過乙個主線程上標誌的集合來維護各個非同步請求的 「丟棄狀態」 ,這樣,即使請求剛好返回了,那麼繼續回到ui部分的 「結束**」 就可以根據狀態來立即停止。 瞬時操作,需要同步的狀態,保證其在ui執行緒被執行最好了。

ok,一句話就是非同步請求時,只留最後乙個請求即可——和ui保持一致

比較麻煩的就是頁面切換了——當然體驗要求是應該的:

載入中,網路錯誤,伺服器返回錯誤,無資料,正常返回一些結果——這些不同的情況下,分別用不同的檢視來展示給使用者。

body

body>*:first-child

body>*:last-child

p, blockquote, ul, ol, dl, table, pre

h1, h2, h3, h4, h5, h6

h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code

h1 h2

h3 h4

h5 h6

body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6

h1+p, h2+p, h3+p, h4+p, h5+p, h6+p

a a:hover

ul, ol

ul li>:first-child, ol li>:first-child, ul li ul:first-of-type, ol li ol:first-of-type, ul li ol:first-of-type, ol li ul:first-of-type

ul ul, ul ol, ol ol, ol ul

dl dl dt

dl dt:first-child

dl dt>:first-child

dl dt>:last-child

dl dd

dl dd>:first-child

dl dd>:last-child

pre, code, tt

code, tt

pre>code

pre

pre code, pre tt

kbd

blockquote

blockquote>:first-child

blockquote>:last-child

hr table th

table th, table td

table tr

table tr:nth-child(2n)

img

mysql cache功能小記

mysql cache功能分析 1 mysql的cache功能的key的生成原理是 把select語句按照一定的hash規則生成唯一的key,select的結果生成value,即key value。所以對於cache而言,select語句是區分大小寫的,也區分空格的。兩個select語句必須完完全全...

C 11 14 簡易推薦小記

之前了解過一些c 新標準的內容,覺得很不錯,在此寫篇小記,簡易推薦一下 容器內元素操作是個很普通的需求,工作中應是屢見不鮮,這裡假設有個list 容器,儲存的是一系列 intc 表達一下,大概是這個樣子 ifndef test 1 h define test 1 h include include ...

Android護眼模式功能小記

最近自己在做乙個 閱讀器,看到某閱有護眼模式功能,別人都有,我怎麼能沒有?現在這功能已經不稀奇了,很多手機都帶有這個功能。實現起來不難,用乙個蒙版遮在介面上面就行。至於蒙版,可以用window實現,也可以只用套個framelayout實現。window實現的優點是,支援全域性,切可以覆蓋狀態列。缺點...