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