【问题标题】:Know when RecyclerView items are shown for the first time (Android)了解 RecyclerView 项目何时首次显示(Android)
【发布时间】:2015-04-30 22:27:36
【问题描述】:

我正在尝试使用 Google Analytics Enhanced Ecommerce 在 RecyclerView StaggeredGrid 上发送我的产品“印象”。每次用户滚动时,我都会检查哪些产品是可见的并发送一个 Hit:

public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
    super.onScrollStateChanged(recyclerView, newState);

    if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
        for (int i = firstVisibleItemPosition; i <= lastVisibleItemPosition; i++) {
            Offer offer = mListViewContentFetcher.getApiObjects().get(i);

            Product product = new Product()
                .setId(offer.getCode())
                .setName(offer.getTitle())
                .setCategory(offer.getStore().getName())
                .setPosition(i);

            builder.addImpression(product, "products_list");
        }

        mTracker.setScreenName("Products List");
        mTracker.send(builder.build());
    }
}

但是当 RecyclerView 第一次构建并且第一个产品可见时,我还需要运行它。

我怎么知道第一批物品已经准备好了? 我尝试在 recyclerview 和 onBindViewHolder 上使用 ViewTreeObserver,但没有成功。

编辑:这是在viewpager上使用的片段内,所以我需要知道这些项目何时真正可见,而不仅仅是添加。

谢谢

【问题讨论】:

    标签: android google-analytics visible android-recyclerview staggeredgridlayout


    【解决方案1】:

    您不能使用 RecyclerView.Adapter 的 onViewAttachedToWindowonViewDetachedFromWindow 方法来跟踪事物何时进入/离开视野吗?

    【讨论】:

    • 看起来很有希望!该文档对描述方法行为不是很有帮助,但我会尝试一下。谢谢
    • 我设法使用 onViewAttachedToWindow 来完成正确的结果,因此我将其设置为已接受的答案。谢谢你,@Buddy。如果片段可见(使用getUserVisibleHint()),我所做的是在 onViewAttachedToWindow 上添加展示次数,然后发送片段的分析命中 onPause
    • @petrusgomes 很高兴我能帮上忙!
    • @petrusgomes 你能分享一些这个实现的代码吗?
    • 对不起,@DivyeshPatel。我再也无法访问代码了。但如果我没记错的话,我将印象保存在 Map 中,在调用上面的侦听器时添加或删除它。
    猜你喜欢
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2021-11-15
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多