我如何知道用户是否查看过列表项?

时间:2018-08-25 23:19:38

标签: java android android-recyclerview

我正在创建新闻提要,我想知道用户何时看到帖子。 我正在使用此代码。

      final int[] lastItemSeen = {0};
    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            try {
                int[] lastVisibleItemPositions = linearLayoutManager.findLastVisibleItemPositions(null);

                int lastVisibleItem = getLastVisibleItem(lastVisibleItemPositions);


                int totalItemCount = linearLayoutManager.getItemCount();
                if (!isLoading && totalItemCount <= (lastVisibleItem + 1)) {
                    isLoading = true;
                    if (onLoadMoreListener != null){
                        onLoadMoreListener.onLoadMore();
                    }
                }
                if (lastVisibleItem != lastItemSeen[0]){
                    lastItemSeen[0] = lastVisibleItem;
                    timer[0].cancel();
                    timer[0] = new Timer();
                    timer[0].schedule(
                            new TimerTask() {
                                @Override
                                public void run() {
                                    String objectId = getObjectId(lastVisibleItem);
                                    if (!isSeen(objectId)){
                                        seenObjects.add(objectId);
                                        Log.i("infoViewdtwae", "Item Add " + getObjectId(lastVisibleItem));
                                    }
                                    Log.i("infoViewdtwae", "this item was seen : " + getObjectId(lastVisibleItem));
                                }
                            },
                            DELAY
                    );
                }

            }catch ( Exception e){
                e.printStackTrace();
            }

        }
    });

部分地,此代码可以正常工作。这里最大的问题是,当我有一个项目大于用户屏幕上的大小时,并且当有多个项目可见时,此代码将无法正常工作,因为每当屏幕上出现新视图时,它都会取消计时器,然后重新开始计数。我正在考虑改进此方法,但是我不知道它是否是最佳选择,您是否有任何建议或代码示例可以与我分享?谢谢

0 个答案:

没有答案