paging3数据刷新当用户单击Android上的返回按钮时
我正在开发一个Android应用程序使用:
- 撰写
- 导航
- paging3
问题是
- 用户访问“列表片段”,其中一些列表显示为“ viewpager -hixhontalpager(compose)”
- ,“单击其中一个”,用户将导航到“详细信息片段”。
- 单击“返回”按钮,用户导航到“列表片段”。
- 但是目前,列表已刷新。
查看(列表片段):
@AndroidEntryPoint
class ArticlesFragment : Fragment() {
private val vm: ArticlesViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
setup()
return ComposeView(requireContext()).apply {
setContent {
Theme {
Scaffold {
Articles(vm.articles.collectAsLazyPagingItems())
}
}
}
}
}
@OptIn(ExperimentalPagerApi::class)
@Composable
private fun Articles(articles: LazyPagingItems<Article>) {
HorizontalPager(
count = articles.itemCount,
state = vm.pagerState,
) { page ->
articles[page]?.let { article ->
ArticleUi(article)
}
}
}
}
ViewModel类:
@OptIn(ExperimentalPagerApi::class)
@HiltViewModel
class ArticlesViewModel @Inject constructor(
private val getArticlesUsecase: GetArticlesUsecase
) {
val pagerState = PagerState()
val articles: Flow<PagingData<Article>> = getArticlesUsecase.get()
}
I am developing an android app using:
- Compose
- Navigation
- Paging3
The problem is
- User access "List Fragment" which shows some lists as "ViewPager - HorizontalPager(Compose)"
- Click one of them, and the user navigates to "Details Fragment".
- Click "back" button, and the user navigates to back "List Fragment".
- But at this time, the list is refreshed.
View (List Fragment):
@AndroidEntryPoint
class ArticlesFragment : Fragment() {
private val vm: ArticlesViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
setup()
return ComposeView(requireContext()).apply {
setContent {
Theme {
Scaffold {
Articles(vm.articles.collectAsLazyPagingItems())
}
}
}
}
}
@OptIn(ExperimentalPagerApi::class)
@Composable
private fun Articles(articles: LazyPagingItems<Article>) {
HorizontalPager(
count = articles.itemCount,
state = vm.pagerState,
) { page ->
articles[page]?.let { article ->
ArticleUi(article)
}
}
}
}
ViewModel class:
@OptIn(ExperimentalPagerApi::class)
@HiltViewModel
class ArticlesViewModel @Inject constructor(
private val getArticlesUsecase: GetArticlesUsecase
) {
val pagerState = PagerState()
val articles: Flow<PagingData<Article>> = getArticlesUsecase.get()
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
正如@vitidev在他的评论中所写。
使用卡切丁避免刷新
As @vitidev wrote in his comment.
Use cachedIn to avoid refresh