下面列出了android.widget.AbsListView#getCount ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Check if the items in the list can be scrolled in a certain direction.
*
* @param listView listView
* @param direction Negative to check scrolling up, positive to check
* scrolling down.
* @return true if the list can be scrolled in the specified direction,
* false otherwise.
*/
public static boolean canListViewScrollVertical(AbsListView listView, int direction) {
if (Build.VERSION.SDK_INT >= 19) {
// Call the framework version directly
return listView.canScrollList(direction);
} else {
// provide backport on earlier versions
final int childCount = listView.getChildCount();
if (childCount == 0) {
return false;
}
final int firstPosition = listView.getFirstVisiblePosition();
if (direction > 0) {
final int lastBottom = listView.getChildAt(childCount - 1).getBottom();
final int lastPosition = firstPosition + childCount;
return lastPosition < listView.getCount()
|| (lastBottom > listView.getHeight() - listView.getListPaddingBottom());
} else {
final int firstTop = listView.getChildAt(0).getTop();
return firstPosition > 0 || firstTop < listView.getListPaddingTop();
}
}
}
/**
* Copy From AbsListView (API Level >= 19)
* @param absListView AbsListView
* @param direction Negative to check scrolling up, positive to check
* scrolling down.
* @return true if the list can be scrolled in the specified direction,
* false otherwise
*/
private boolean absListViewCanScrollList(AbsListView absListView,int direction) {
final int childCount = absListView.getChildCount();
if (childCount == 0) {
return false;
}
final int firstPosition = absListView.getFirstVisiblePosition();
if (direction > 0) {//can scroll down
final int lastBottom = absListView.getChildAt(childCount - 1).getBottom();
final int lastPosition = firstPosition + childCount;
return lastPosition < absListView.getCount() || lastBottom > absListView.getHeight() - absListView.getPaddingTop();
} else {//can scroll up
final int firstTop = absListView.getChildAt(0).getTop();
return firstPosition > 0 || firstTop < absListView.getPaddingTop();
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE:
//Log.v(TAG, "已经停止:SCROLL_STATE_IDLE" + "-->" + view.getCount());
Context context = view.getContext();
SheJiaoMaoApplication sheJiaoMao = (SheJiaoMaoApplication) context.getApplicationContext();
if (view.getLastVisiblePosition() == view.getCount() - 1
&& sheJiaoMao.isAutoLoadMore()) {
view.getChildAt(view.getChildCount() - 1).performClick();
}
break;
case OnScrollListener.SCROLL_STATE_FLING:
//Log.v(TAG, "开始滚动:SCROLL_STATE_FLING");
break;
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
//Log.v(TAG, "正在滚动:SCROLL_STATE_TOUCH_SCROLL");
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
mFirstVisibleItem = firstVisibleItem;
if (view.getFirstVisiblePosition() == 1) {
mIsTop = true;
// 滑动到顶部
} else if (onLoadMoreListener != null && view.getLastVisiblePosition() == view.getCount() - 1) {
mIsBottom = true;
onLoadMoreListener.onLoadMore();
// 滑动到底部
} else {
mIsTop = false;
mIsBottom = false;
}
}
public boolean canChildScrollDown() {
if (android.os.Build.VERSION.SDK_INT < 14) {
if (mTarget instanceof AbsListView) {
final AbsListView absListView = (AbsListView) mTarget;
try {
if (absListView.getCount() > 0) {
if (absListView.getLastVisiblePosition() + 1 == absListView.getCount()) {
int lastIndex = absListView.getLastVisiblePosition() - absListView.getFirstVisiblePosition();
return absListView.getChildAt(lastIndex).getBottom() == absListView.getPaddingBottom();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
} else {
return true;
}
} else {
return ViewCompat.canScrollVertically(mTarget, 1);
}
}
public boolean canChildScrollDown() {
if (android.os.Build.VERSION.SDK_INT < 14) {
if (mTarget instanceof AbsListView) {
final AbsListView absListView = (AbsListView) mTarget;
View lastChild = absListView.getChildAt(absListView.getChildCount() - 1);
if (lastChild != null) {
return (absListView.getLastVisiblePosition() == (absListView.getCount() - 1))
&& lastChild.getBottom() > absListView.getPaddingBottom();
}
else
{
return false;
}
} else {
return mTarget.getHeight() - mTarget.getScrollY() > 0;
}
} else {
return ViewCompat.canScrollVertically(mTarget, 1);
}
}
public static int getItemIndexAtLocation(AbsListView listView, int y) {
int index = 0;
if (listView.getCount() <= 0)
return index;
int k = listView.getFirstVisiblePosition();
for(int i = k ; i <= listView.getLastVisiblePosition() ; i++) {
View view = listView.getChildAt(i - k);
if (y > view.getTop() && y < view.getBottom() ) {
return index = i;
}
}
return 0;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
listview.onScrollStateChanged(view, scrollState);
// 当不滚动时
if (scrollState == SCROLL_STATE_IDLE) {
// 判断滚动到底部
if (!IS_LOADING
&& view.getLastVisiblePosition() == (view.getCount() - 1)) {
Log.e("TAG", "loading。。。");
IS_LOADING = true;
getMore();
}
}
}
/**
* Returns, whether a specific list view is scrolled to the bottom, or not.
*
* @param scrollView The list view as an instance of the class {@link AbsListView}. The list view may not
* be null
* @return True, if the given list view is scrolled to the bottom, false otherwise
*/
private boolean isListViewScrolledToBottom(@NonNull final AbsListView scrollView) {
if (scrollView.getCount() > 0 && scrollView.getChildCount() > 0) {
if (scrollView.getLastVisiblePosition() == scrollView.getCount() - 1) {
View child = scrollView.getChildAt(scrollView.getChildCount() - 1);
return child == null || child.getBottom() <= scrollView.getHeight();
}
} else {
return true;
}
return false;
}
@Override
public void onScrollStateChanged(AbsListView listView, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE && listView.getLastVisiblePosition() + 1 == listView.getCount()) {// 如果滚动到最后一行
if (onScrollBottomListener != null) {
onScrollBottomListener.onScorllBootom();
}
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE && view.getLastVisiblePosition() + 1 == view.getCount()) {// 如果滚动到最后一行
if (onScrollBottomListener != null) {
onScrollBottomListener.onScorllBootom();
}
}
}
@Override
public boolean isScrolledToTop(View view) {
AbsListView absListView = (AbsListView) view;
if (absListView.getCount() == 0) {
return true;
} else if (absListView.getFirstVisiblePosition() == 0) {
final View firstVisibleChild = absListView.getChildAt(0);
return firstVisibleChild != null && firstVisibleChild.getTop() >= 0;
}
return false;
}
private static boolean scrolledToBottom(AbsListView listView) {
final int count = listView.getCount();
if (count == 0) {
return true;
} else if (listView.getLastVisiblePosition() == count - 1) {
final View lastChild = listView.getChildAt(listView.getChildCount() - 1);
return lastChild != null && lastChild.getBottom() <= listView.getHeight();
} else {
return false;
}
}
@Override
public boolean isReadyForPull(View view, final float x, final float y) {
boolean ready = false;
// First we check whether we're scrolled to the top
AbsListView absListView = (AbsListView) view;
if (absListView.getCount() == 0) {
ready = true;
} else if (absListView.getFirstVisiblePosition() == 0) {
final View firstVisibleChild = absListView.getChildAt(0);
ready = firstVisibleChild != null && firstVisibleChild.getTop() >= 0;
}
// Then we have to check whether the fas scroller is enabled, and check we're not starting
// the gesture from the scroller
if (ready && absListView.isFastScrollEnabled() && isFastScrollAlwaysVisible(absListView)) {
switch (getVerticalScrollbarPosition(absListView)) {
case View.SCROLLBAR_POSITION_RIGHT:
ready = x < absListView.getRight() - absListView.getVerticalScrollbarWidth();
break;
case View.SCROLLBAR_POSITION_LEFT:
ready = x > absListView.getVerticalScrollbarWidth();
break;
}
}
return ready;
}
public static boolean reachedListBottom(AbsListView listView) {
boolean flag = true;
if (listView.getChildCount() != 0) {
int i = listView.getLastVisiblePosition();
int j = listView.getCount();
int k = listView.getHeight();
int l = listView.getChildAt(-1 + listView.getChildCount()).getBottom();
if (i != j - 1 || l > k) {
flag = false;
}
}
return flag;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
mFirstVisibleItem = firstVisibleItem;
if (view.getFirstVisiblePosition() == 1) {
mIsTop = true;
} else if (view.getLastVisiblePosition() == view.getCount() - 1) {
mIsBottom = true;
} else {
mIsTop = false;
mIsBottom = false;
}
}
@Override
public boolean isScrolledToTop(View view) {
AbsListView absListView = (AbsListView) view;
if (absListView.getCount() == 0) {
return true;
} else if (absListView.getFirstVisiblePosition() == 0) {
final View firstVisibleChild = absListView.getChildAt(0);
return firstVisibleChild != null && firstVisibleChild.getTop() >= 0;
}
return false;
}
@Override
public boolean isReadyForPull(View view, final float x, final float y) {
boolean ready = false;
// First we check whether we're scrolled to the top
AbsListView absListView = (AbsListView) view;
if (absListView.getCount() == 0) {
ready = true;
} else if (absListView.getFirstVisiblePosition() == 0) {
final View firstVisibleChild = absListView.getChildAt(0);
ready = firstVisibleChild != null && firstVisibleChild.getTop() >= absListView.getPaddingTop();
}
// Then we have to check whether the fas scroller is enabled, and check we're not starting
// the gesture from the scroller
if (ready && absListView.isFastScrollEnabled() && isFastScrollAlwaysVisible(absListView)) {
switch (getVerticalScrollbarPosition(absListView)) {
case View.SCROLLBAR_POSITION_RIGHT:
ready = x < absListView.getRight() - absListView.getVerticalScrollbarWidth();
break;
case View.SCROLLBAR_POSITION_LEFT:
ready = x > absListView.getVerticalScrollbarWidth();
break;
}
}
return ready;
}
/**
* Gets the position of the one and only checked item in the provided list in multiple selection
* mode.
*
* @return {@code 0}-based position.
* @throws IllegalStateException if the list is not in multiple selection mode, or if the number
* of checked items is not {@code 1}.
*/
@TargetApi(11)
private static int getMultiSelectListSingleCheckedItemPosition(AbsListView list) {
Preconditions.checkState(list.getCheckedItemCount() == 1);
SparseBooleanArray checkedItemPositions = list.getCheckedItemPositions();
Preconditions.checkState(checkedItemPositions != null);
for (int i = 0, len = list.getCount(); i < len; i++) {
boolean itemChecked = checkedItemPositions.get(i);
if (itemChecked) {
return i;
}
}
throw new IllegalStateException("No items checked");
}
@Override
public
boolean isReadyForPull(View view, float x, float y)
{
boolean ready = false;
/* First we check whether we're scrolled to the top of current page. */
if(null != s_fragmentFeeds)
{
AbsListView absListView = getCurrentTagListView();
if(0 == absListView.getCount())
{
ready = true;
}
else if(0 == absListView.getFirstVisiblePosition())
{
View firstVisibleChild = absListView.getChildAt(0);
ready = null != firstVisibleChild && 0 <= firstVisibleChild.getTop();
}
if(ready && absListView.isFastScrollEnabled() && absListView.isFastScrollAlwaysVisible())
{
switch(absListView.getVerticalScrollbarPosition())
{
case View.SCROLLBAR_POSITION_LEFT:
return x > absListView.getVerticalScrollbarWidth();
case View.SCROLLBAR_POSITION_RIGHT:
return x < absListView.getRight() - absListView.getVerticalScrollbarWidth();
}
}
}
return ready;
}