【问题标题】:How to detect if the user stops writing to a TextField?如何检测用户是否停止写入 TextField?
【发布时间】:2022-01-10 22:17:47
【问题描述】:

我有一个带有 Jetpack Compose 的屏幕,其中有一个 TextField 供用户编写文本。

我将通过此文本进行查询以获取数据。我希望在用户完成输入后进行此查询。

有没有办法知道用户是否需要 2 秒而不写(例如)来启动此查询?

【问题讨论】:

标签: android kotlin android-jetpack-compose


【解决方案1】:

要在用户停止输入 2 秒后查询,我认为您可以使用 debounce 运算符(与此处的答案类似 Jetpack Compose and Room DB: Performance overhead of auto-saving user input?

这里是处理TextField上的文本更改,然后查询数据库并将结果返回给dbText的示例

class VM : ViewModel() {
    val text = MutableStateFlow("")
    val dbText = text.debounce(2000)
        .distinctUntilChanged()
        .flatMapLatest {
            queryFromDb(it)
        }

    private fun queryFromDb(query: String): Flow<String> {
        Log.i("TAG", "query from db: " + query)
        if (query.isEmpty()) {
            return flowOf("Empty Result")
        }
        // TODO, do query from DB and return result
    }
}

Composable

Column {
    val text by viewModel.text.collectAsState()
    val dbText by viewModel.dbText.collectAsState("Empty Result")

    TextField(value = text, onValueChange = { viewModel.text.value = it })
    Text(text = dbText)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2023-03-19
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    相关资源
    最近更新 更多