paging3数据刷新当用户单击Android上的返回按钮时

发布于 2025-02-03 09:27:01 字数 1611 浏览 4 评论 0原文

我正在开发一个Android应用程序使用:

  • 撰写
  • 导航
  • paging3

问题是

  1. 用户访问“列表片段”,其中一些列表显示为“ viewpager -hixhontalpager(compose)”
  2. ,“单击其中一个”,用户将导航到“详细信息片段”。
  3. 单击“返回”按钮,用户导航到“列表片段”。
  4. 但是目前,列表已刷新。

查看(列表片段):

@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

  1. User access "List Fragment" which shows some lists as "ViewPager - HorizontalPager(Compose)"
  2. Click one of them, and the user navigates to "Details Fragment".
  3. Click "back" button, and the user navigates to back "List Fragment".
  4. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苦行僧 2025-02-10 09:27:01

正如@vitidev在他的评论中所写。

使用卡切丁避免刷新

val articles: Flow<PagingData<Article>> = getArticlesUsecase.get().cachedIn(viewModelScope)

As @vitidev wrote in his comment.

Use cachedIn to avoid refresh

val articles: Flow<PagingData<Article>> = getArticlesUsecase.get().cachedIn(viewModelScope)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文