Android - 检测RecyclerView中的最后一个项目是否可见
我有一个方法可以检查RecyclerView中的最后一个元素是否完全由用户看到,到目前为止我有这个代码 问题是如何检查RecyclerView已经达到了底部?Android - 检测RecyclerView中的最后一个项目是否可见
PS我有一个项目分隔
public void scroll_btn_visibility_controller(){
if(/**last item is visible to user*/){
//This is the Bottom of the RecyclerView
Scroll_Top_Btn.setVisibility(View.VISIBLE);
}
else(/**last item is not visible to user*/){
Scroll_Top_Btn.setVisibility(View.INVISIBLE);
}
}
UPDATE:这是我尝试
boolean isLastVisible() {
LinearLayoutManager layoutManager = ((LinearLayoutManager)rv.getLayoutManager());
int pos = layoutManager.findLastCompletelyVisibleItemPosition();
int numItems = disp_adapter.getItemCount();
return (pos >= numItems);
}
public void scroll_btn_visibility_controller(){
if(isLastVisible()){
Scroll_Top.setVisibility(View.VISIBLE);
}
else{
Scroll_Top.setVisibility(View.INVISIBLE);
}
}
的尝试之一到目前为止,还没有成功,我觉得有一些内部错误这些行:
int pos = layoutManager.findLastCompletelyVisibleItemPosition();
int numItems = disp_adapter.getItemCount();
尝试onScrollStateChenged
工作将解决您的问题
假设你正在使用LinearLayoutManager
,这种方法应该做的伎俩:
boolean isLastVisible() {
LinearLayoutManager layoutManager = ((LinearLayoutManager)mRecyclerView.getLayoutManager());
int pos = layoutManager.findLastCompletelyVisibleItemPosition();
int numItems = mRecyclerView.getAdapter().getItemCount();
return (pos >= numItems);
}
这正是我想要的但是我有一个NullPointerException,游标显示我这一行:'int numItems = mRecyclerView.getAdapter()。getItemCount();' –
创建适配器时,将其设置为某个字段(mAdapter),并使用该字段'int numItems = mAdapter.getItemCount();' – marmor
这没有奏效,我不确定是否我的解释是正确的,但是,这就是我基本上做了int intItems = mAdapter.getItemCount();'改正我如果我错了 –
您可以创建在适配器中的回调,将每次发送邮件到您的活动/片段时的最后一个项目是可见。
例如,你可以实现这个想法在onBindViewHolder方法
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
if(position==(getItemCount()-1)){
// here goes some code
// callback.sendMessage(Message);
}
//do the rest of your stuff
}
UPDATE
嗯,我知道它已经有一段时间,但今天我碰到了同样的问题,我想出了用完美的解决方案。所以,我就离开这里,如果有人曾经需要它:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
LinearLayoutManager layoutManager=LinearLayoutManager.class.cast(recyclerView.getLayoutManager());
int totalItemCount = layoutManager.getItemCount();
int lastVisible = layoutManager.findLastVisibleItemPosition();
boolean endHasBeenReached = lastVisible + 5 >= totalItemCount;
if (totalItemCount > 0 && endHasBeenReached) {
//you have reached to the bottom of your recycler view
}
}
});
您能否进一步详细解释代码? –
只有当物品被回收时才能使用...如果物品只有两三个,onBindViewHolder只在第一次显示物品时调用一次,这意味着每个物品的位置检查只有一次。 如果我们需要在滚动时动态更改items/recyclerview之外的内容,它将在第一时间继续工作。 CMIIW – hayi
什么是你的问题? – Real73
@ Real73我不知道该怎么做! –
[在RecyclerView中获取可见项目]的可能重复(http://*.com/questions/24989218/get-visible-items-in-recyclerview) – Acapulco