iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Mobile Development

花30天做個Android小專案系列 第 14

Day14 - 解析看板文章及顯示

  • 分享至 

  • xImage
  •  

該來處理搜尋結果了。

在前幾天的內容中,當我完成搜尋時,都會使用parseBoardArticle方法將目前畫面的內容傳入,今天主要就是看這個Method在做些什麼事。

parseBoardArticle

private fun parseBoardArticle(result: String) {
    val articleList = mutableListOf<Article>()
    val articlePattern =
        Pattern.compile("([●]|[ ])*(?<no>[0-9]+)[ ].([0-9 X]+|爆)(?<date>../..)[ ](?<author>.*?)([\\s□轉]|R:)+(?<title>.*)")
    val rows = result.split("\n")
    for (row in rows) {
        val matcher = articlePattern.matcher(row)
        if (matcher.find()) {
            val article = Article(
                matcher.group("no")?.trim(),
                matcher.group("date")?.trim(),
                matcher.group("author")?.trim(),
                matcher.group("title")?.trim()
            )
            articleList.add(0, article)
            Log.d(mTag, "article=$article")
        }
    }

    articleAdapter.setData(articleList)
}

可以看到主要的分析方式是使用Pattern

https://ithelp.ithome.com.tw/upload/images/20210928/20124602d2lcYxvecR.png

對應的文章列表結構

https://ithelp.ithome.com.tw/upload/images/20210928/20124602eA5pVo0uZA.png

解析出來後便是將需要的內容存至data class Article

data class Article(
    val number: String?,
    val date: String?,
    val author: String?,
    val title: String?
)

並加入至articleList中,由於我希望將比較新的文章放在RecyclerView的第一項,因此add時固定加入到首位。articleAdapter則是該RecyclerViewAdapter,預計明天應該會看一下裡面的內容跟處理新增資料的功能。

另外在移除搜尋項目過程呼叫refreshSearch時,若searchTitleSetsearchAuthorSet都無內容,則將articleAdapter的列表清空。

//...
if (searchTitleSet.isEmpty() && searchAuthorSet.isEmpty()) {
    articleAdapter.setData(listOf())
    return@withContext
}
//...

目前操作畫面

https://i.imgur.com/2S1g6qu.gif


上一篇
Day13 - 使用Chip和ChipGroup顯示搜尋項目
下一篇
Day15 - Ptt換頁及新增文章列表項目
系列文
花30天做個Android小專案30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言