android.support.v7.widget.LinearLayoutManager#findLastCompletelyVisibleItemPosition ( )源码实例Demo

下面列出了android.support.v7.widget.LinearLayoutManager#findLastCompletelyVisibleItemPosition ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: Ticket-Analysis   文件: PullToZoomViewEx.java
public boolean isLastItemVisible() {
    if (mRootView != null) {
        final RecyclerView.Adapter adapter = mRootView.getAdapter();
        LinearLayoutManager layoutManager = (LinearLayoutManager) mRootView.getLayoutManager();

        if (adapter == null || adapter.getItemCount() == 0) {
            LogUtil.d(TAG, "空数据");
            return true;
        } else {
            if (layoutManager != null) {
                int lastPosition = layoutManager.findLastCompletelyVisibleItemPosition();
                if (lastPosition == adapter.getItemCount() - 1 && lastPosition > 5) {
                    return true;
                } else {
                    return false;
                }
            }
            return false;
        }
    }
    return false;
}
 
源代码2 项目: SimpleRecyclerView   文件: StartSnapHelper.java
private View getStartView(RecyclerView.LayoutManager layoutManager,
                          OrientationHelper helper) {
  if (!(layoutManager instanceof LinearLayoutManager)) {
    return super.findSnapView(layoutManager);
  }

  LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager;

  int firstChild = linearLayoutManager.findFirstVisibleItemPosition();

  boolean isLastItem = linearLayoutManager.findLastCompletelyVisibleItemPosition() == layoutManager.getItemCount() - 1;

  if (firstChild == RecyclerView.NO_POSITION || isLastItem) {
    return null;
  }

  View child = layoutManager.findViewByPosition(firstChild);

  if (helper.getDecoratedEnd(child) >= helper.getDecoratedMeasurement(child) / 2
    && helper.getDecoratedEnd(child) > 0) {
    return child;
  } else {
    return layoutManager.findViewByPosition(firstChild + 1);
  }
}
 
源代码3 项目: MiPushFramework   文件: OnLoadMoreListener.java
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
        layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();

        itemCount = layoutManager.getItemCount();
        lastPosition = layoutManager.findLastCompletelyVisibleItemPosition();
    } else {
        Log.e("OnLoadMoreListener", "The OnLoadMoreListener only support LinearLayoutManager");
        return;
    }

    if (lastItemCount != itemCount && (lastPosition > itemCount - 3)) {
        lastItemCount = itemCount;
        this.onLoadMore();
    }
}
 
源代码4 项目: ZhihuDaily   文件: LoadMoreRecyclerView.java
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    LoadMoreRecyclerView view = (LoadMoreRecyclerView) recyclerView;
    onLoadMoreListener onLoadMoreListener = view.getOnLoadMoreListener();

    onLoadMoreListener.onScrolled(recyclerView, dx, dy);

    //if scroll to bottom
    LinearLayoutManager layoutManager = (LinearLayoutManager) view.getLayoutManager();
    int lastVisibleItem = layoutManager.findLastCompletelyVisibleItemPosition();
    int itemCount = layoutManager.getItemCount();
    if (lastVisibleItem >= itemCount - 1 && !view.getLoadingMore()) {
        onLoadMoreListener.onLoadMore();
        L.i(TAG, "load more: lastVisibleItem = " + lastVisibleItem + ", itemCount " + itemCount);
    } else {
        super.onScrolled(recyclerView, dx, dy);
    }
}
 
源代码5 项目: zhizhihu   文件: PostListFragment.java
private RecyclerView.OnScrollListener getScrollToBottomListener(final LinearLayoutManager linearLayoutManager) {
    return new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            int lastItem = linearLayoutManager.findLastCompletelyVisibleItemPosition();
            int count = mPostListAdapter.getItemCount() - 1;
            boolean isBottom = (lastItem == count);
            if (!mSwipeRefreshLayout.isRefreshing() && isBottom) {
                if (!mIsFirstTimeTouchBottom) {
                    Log.e("onScrolled=>", "refresh.... ");
                    mPresenter.loadNextPage();
                } else {
                    mIsFirstTimeTouchBottom = false;
                }
            }
        }
    };
}
 
源代码6 项目: Toutiao   文件: OnLoadMoreListener.java
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
        layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();

        itemCount = layoutManager.getItemCount();
        lastPosition = layoutManager.findLastCompletelyVisibleItemPosition();
    } else {
        Log.e("OnLoadMoreListener", "The OnLoadMoreListener only support LinearLayoutManager");
        return;
    }

    if (lastItemCount != itemCount && lastPosition == itemCount - 1) {
        lastItemCount = itemCount;
        this.onLoadMore();
    }
}
 
源代码7 项目: AndroidUiKit   文件: LoadMoreDelegate.java
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
    if (dy < 0 || loadMoreSubject == null || loadMoreSubject.isLoading()){
        return;
    }

    int lastItem = 0;
    RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
    int totalItemCount = layoutManager.getItemCount();
    if (layoutManager instanceof GridLayoutManager) {
        GridLayoutManager gridLayoutManager = ((GridLayoutManager) layoutManager);
        //Position to find the final item of the current LayoutManager
        lastItem = gridLayoutManager.findLastCompletelyVisibleItemPosition();
        if (lastItem == -1){
            lastItem = gridLayoutManager.findLastVisibleItemPosition();
        }
    } else if (layoutManager instanceof LinearLayoutManager) {
        LinearLayoutManager linearLayoutManager = ((LinearLayoutManager) layoutManager);
        lastItem = linearLayoutManager.findLastCompletelyVisibleItemPosition();
        if (lastItem == -1){
            lastItem = linearLayoutManager.findLastVisibleItemPosition();
        }
    } else if (layoutManager instanceof StaggeredGridLayoutManager) {
        StaggeredGridLayoutManager staggeredGridLayoutManager = ((StaggeredGridLayoutManager) layoutManager);
        // since may lead to the final item has more than one StaggeredGridLayoutManager the particularity of the so here that is an array
        // this array into an array of position and then take the maximum value that is the last show the position value
        int[] lastPositions = staggeredGridLayoutManager.findLastCompletelyVisibleItemPositions(null);
        lastItem = findMax(lastPositions);
    }
    final int childCount = layoutManager.getChildCount();
    final boolean shouldLoadMore = (childCount > 0 && lastItem >= totalItemCount - VISIBLE_THRESHOLD);
    if (shouldLoadMore) {
        loadMoreSubject.onLoadMore();
    }
}
 
源代码8 项目: ht-refreshrecyclerview   文件: Utils.java
/**
 * 获取最后一个可见/完全可见item的位置索引
 * @param layoutManager       RecyclerView.LayoutManager对象
 * @param isCompletelyVisible 是否完全可见
 * @return item的索引
 */
public static int getLastVisibleItemPosition(@NonNull RecyclerView.LayoutManager layoutManager, boolean isCompletelyVisible) {
    int lastVisibleItemPosition = -1;
    if (layoutManager instanceof LinearLayoutManager) {//GridLayoutManager继承LinearLayoutManager
        LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager;
        lastVisibleItemPosition = isCompletelyVisible ? linearLayoutManager.findLastCompletelyVisibleItemPosition() : linearLayoutManager.findLastVisibleItemPosition();
    } else if (layoutManager instanceof StaggeredGridLayoutManager) {
        StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager;
        int[] lastVisibleItemPositions = isCompletelyVisible ? staggeredGridLayoutManager.findLastCompletelyVisibleItemPositions(null) : staggeredGridLayoutManager.findLastCompletelyVisibleItemPositions(null);
        if (lastVisibleItemPositions != null && lastVisibleItemPositions.length > 0)
            lastVisibleItemPosition = findMax(lastVisibleItemPositions);
    }
    return lastVisibleItemPosition;
}
 
源代码9 项目: gank   文件: LMRecyclerView.java
@Override
    public void onScrollStateChanged(int state) {
       /* LinearLayoutManager mLayoutManager = (LinearLayoutManager) getLayoutManager();
        int lastVisibleItemPosition = 0;
        int totalItemCount = 0;
        if (mLayoutManager instanceof LinearLayoutManager) {
            if (state == RecyclerView.SCROLL_STATE_IDLE) {
                lastVisibleItemPosition = mLayoutManager.findLastCompletelyVisibleItemPosition();
                totalItemCount = mLayoutManager.getItemCount();
                if (lastVisibleItemPosition == (totalItemCount - 1) && isScrollingToBottom) {
                    if (listener != null)
                        listener.loadMore();
                }
            }

        } else if (mLayoutManager instanceof GridLayoutManager) {
            if (state == RecyclerView.SCROLL_STATE_IDLE) {
                lastVisibleItemPosition = mLayoutManager.findLastCompletelyVisibleItemPosition();
                totalItemCount = mLayoutManager.getItemCount();
                if (lastVisibleItemPosition == (totalItemCount - 1) && isScrollingToBottom) {
                    if (listener != null)
                        listener.loadMore();
                }
            }
        }
*/
       LinearLayoutManager layoutManager = (LinearLayoutManager) getLayoutManager();
        if (state == RecyclerView.SCROLL_STATE_IDLE) {
            int lastVisibleItem = layoutManager.findLastCompletelyVisibleItemPosition();
            int totalItemCount = layoutManager.getItemCount();
            if (lastVisibleItem == (totalItemCount - 1) && isScrollingToBottom) {
                if (listener != null)
                    listener.loadMore();
            }
        }
    }
 
源代码10 项目: Bounce   文件: BounceTouchListener.java
private boolean hasHitBottom() {
    if (mMainView instanceof ScrollView) {
        ScrollView scrollView = (ScrollView) mMainView;
        View view = scrollView.getChildAt(scrollView.getChildCount() - 1);
        int diff = (view.getBottom() - (scrollView.getHeight() + scrollView.getScrollY()));// Calculate the scrolldiff
        return diff == 0;
    } else if (mMainView instanceof ListView) {
        ListView listView = (ListView) mMainView;
        if (listView.getAdapter() != null) {
            if (listView.getAdapter().getCount() > 0) {
                return listView.getLastVisiblePosition() == listView.getAdapter().getCount() - 1 &&
                        listView.getChildAt(listView.getChildCount() - 1).getBottom() <= listView.getHeight();
            }
        }
    } else if (mMainView instanceof RecyclerView) {
        RecyclerView recyclerView = (RecyclerView) mMainView;
        if (recyclerView.getAdapter() != null && recyclerView.getLayoutManager() != null) {
            RecyclerView.Adapter adapter = recyclerView.getAdapter();
            if (adapter.getItemCount() > 0) {
                RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
                if (layoutManager instanceof LinearLayoutManager) {
                    LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager;
                    return linearLayoutManager.findLastCompletelyVisibleItemPosition() == adapter.getItemCount() - 1;
                } else if (layoutManager instanceof StaggeredGridLayoutManager) {
                    StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager;
                    int[] checks = staggeredGridLayoutManager.findLastCompletelyVisibleItemPositions(null);
                    for (int check : checks) {
                        if (check == adapter.getItemCount() - 1)
                            return true;
                    }
                }
            }
        }
    }
    return false;
}
 
源代码11 项目: SuntimesWidget   文件: GravitySnapHelper.java
private boolean isAtEdgeOfList(LinearLayoutManager lm) {
    if ((!lm.getReverseLayout() && gravity == Gravity.START)
            || (lm.getReverseLayout() && gravity == Gravity.END)
            || (!lm.getReverseLayout() && gravity == Gravity.TOP)
            || (lm.getReverseLayout() && gravity == Gravity.BOTTOM)) {
        return lm.findLastCompletelyVisibleItemPosition() == lm.getItemCount() - 1;
    } else if (gravity == Gravity.CENTER) {
        return lm.findFirstCompletelyVisibleItemPosition() == 0
                || lm.findLastCompletelyVisibleItemPosition() == lm.getItemCount() - 1;
    } else {
        return lm.findFirstCompletelyVisibleItemPosition() == 0;
    }
}
 
源代码12 项目: Gank.io   文件: LMRecyclerView.java
@Override
public void onScrollStateChanged(int state) {
  LinearLayoutManager layoutManager = (LinearLayoutManager) getLayoutManager();
  if (state == RecyclerView.SCROLL_STATE_IDLE) {
    int lastVisibleItem = layoutManager.findLastCompletelyVisibleItemPosition();
    int totalItemCount = layoutManager.getItemCount();
    if (lastVisibleItem == (totalItemCount - 1) && isScrollingToBottom) {
      if (listener != null)
        listener.loadMore();
    }
  }
}
 
private void toggleExpanded() {
    if (busyIndicator.getVisibility() == View.VISIBLE) {
        // Don't allow collapsing the view when the busy indicator
        // is shown because the APK is being downloaded and it's quite important
        return;
    }

    boolean expand = !versionsExpandTracker.get(apk.apkName);
    expand(expand);

    if (expand) {
        // Scroll the versions view to a correct position so it can show the whole item
        final LinearLayoutManager lm = (LinearLayoutManager) recyclerView.getLayoutManager();
        final int currentPosition = getAdapterPosition();
        if (currentPosition >= lm.findLastCompletelyVisibleItemPosition()) {
            // Do it only if the item is near the bottom of current viewport
            recyclerView.getViewTreeObserver()
                    .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                        @Override
                        public void onGlobalLayout() {
                            // Expanded item dimensions should be already calculated at this moment
                            // so it's possible to correctly scroll to a given position
                            recyclerView.smoothScrollToPosition(currentPosition);
                            recyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                        }
                    });
        }
    }
}
 
源代码14 项目: NIM_Android_UIKit   文件: MessageListPanelEx.java
private boolean isLastMessageVisible() {
    LinearLayoutManager layoutManager = (LinearLayoutManager) messageListView.getLayoutManager();
    int lastVisiblePosition = layoutManager.findLastCompletelyVisibleItemPosition();
    return lastVisiblePosition >= adapter.getBottomDataPosition();
}
 
源代码15 项目: NIM_Android_UIKit   文件: ChatRoomMsgListPanel.java
private boolean isLastMessageVisible() {
    LinearLayoutManager layoutManager = (LinearLayoutManager) messageListView.getLayoutManager();
    int lastVisiblePosition = layoutManager.findLastCompletelyVisibleItemPosition();
    return lastVisiblePosition >= adapter.getBottomDataPosition();
}