Day14 - 解析看板文章及显示

该来处理搜寻结果了。

在前几天的内容中,当我完成搜寻时,都会使用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


<<:  [13th][Day21] scratch

>>:  [重构倒数第02天] - Slots 与 Render Functions 的进阶心法

Unity与Photon的新手相遇旅途 | Day26-Photon同步元件介绍、GameManager设定

今天内容为介绍Photon同步元件,以及修改GameManager.cs,来生成角色。 ...

IT铁人DAY 13-Composite 组合模式

  今天要来介绍Composite Pattern,是属於Structural Design Pat...

day 2 - 先看清楚目标的样子再动手

画流程图是我的第一堂程序课内容,大学教授讲了很多话,我记得的寥寥无几,其中一句话是:你画的出来就写得...

[day17]使用者名称表格

一样先从建立表格开始,这张表格除了储存来自Line的使用者资讯,也预留了未来资料的输入栏位 栏位 说...

Day26 Bootstrap建立网页

昨天我们利用Bootstrap的框架做了一个三栏的版面,而今天我们就是要利用Bootstrap不同的...