【发布时间】:2022-09-23 17:30:35
【问题描述】:
我正在尝试使用分页实现搜索功能。这是我尝试过的:
fun SearchScreen(
viewModel: SearchViewModel = hiltViewModel()
) {
var search by rememberSaveable(
stateSaver = TextFieldValue.Saver
) {
mutableStateOf(TextFieldValue(\"\"))
}
val searchText = search.text
val searchItems = viewModel.getSearchItems(searchText).collectAsLazyPagingItems()
Scaffold(
topBar = {
SearchTopBar(
search = search
)
},
content = {
LazyVerticalGrid(
columns = GridCells.Adaptive(minSize = 128.dp)
content = {
items(searchItems.itemCount) { index ->
val item = searchItems[index]
ItemCard(item)
}
}
)
if (searchItems.itemCount == 0 && searchText.isNotEmpty()) {
Text(\"No items found.\")
}
}
)
}
现在,当我执行没有结果的搜索时,我想显示一个文本。哪个有效,但是在加载结果时也会显示此文本。例如,我想搜索“培根”。我输入b 它加载以b 开头的项目,我输入a,它显示“未找到项目。”然后显示以ba 开头的项目。我只想在没有结果时显示。我怎样才能做到这一点?
编辑:
fun getSearchItems(searchText: String) = repo.getSearchItems(searchText)
在回购中:
override fun getSearchItems(searchText: String) = Pager(
config = config
) {
AppPagingSource(
query = db.collection(\"items\")
.startAt(searchText)
.endAt(\"$searchText\\uf8ff\")
.limit(PAGE_SIZE)
)
}.flow
标签: android kotlin android-jetpack-compose kotlin-coroutines kotlin-flow