android.widget.ListView#getFirstVisiblePosition ( )源码实例Demo

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

源代码1 项目: Dashchan   文件: ListPosition.java
public static ListPosition obtain(ListView listView) {
	int position = listView.getFirstVisiblePosition();
	int y = 0;
	Rect rect = new Rect();
	int paddingTop = listView.getPaddingTop(), paddingLeft = listView.getPaddingLeft();
	for (int i = 0, count = listView.getChildCount(); i < count; i++) {
		View view = listView.getChildAt(i);
		view.getHitRect(rect);
		if (rect.contains(paddingLeft, paddingTop)) {
			position += i;
			y = rect.top - paddingTop;
			break;
		}
	}
	return new ListPosition(position, y);
}
 
源代码2 项目: edslite   文件: FsBrowserRecord.java
public static RowViewInfo getCurrentRowViewInfo(FileListViewFragment host, Object item)
{
    if(host == null || host.isRemoving() || !host.isResumed())
        return null;
    ListView list = host.getListView();
    if(list == null)
        return null;
    int start = list.getFirstVisiblePosition();
    for(int i=start, j=list.getLastVisiblePosition();i<=j;i++)
        if(j<list.getCount() && item == list.getItemAtPosition(i))
        {
            RowViewInfo rvi = new RowViewInfo();
            rvi.view = list.getChildAt(i-start);
            rvi.position = i;
            rvi.listView = list;
            return rvi;
        }
    return null;
}
 
源代码3 项目: Chorus-RF-Laptimer   文件: PilotsSetupFragment.java
public void updatePilotNames() {
    ListView mListView = (ListView)mRootView.findViewById(R.id.lvPilots);
    int count = AppState.getInstance().deviceStates.size();
    int firstVisibleItemPos = mListView.getFirstVisiblePosition();
    int lastVisibleItemPos = mListView.getLastVisiblePosition();

    // detect possible faulty edge cases
    if (firstVisibleItemPos > lastVisibleItemPos ||
            firstVisibleItemPos < 0 ||
            lastVisibleItemPos > count - 1 ) return;

    // update only visible list items
    for (int i = firstVisibleItemPos; i <= lastVisibleItemPos; i++) {
        // children enumeration starts with zero
        View convertView = mListView.getChildAt(i - firstVisibleItemPos);
        if (convertView != null) {
            EditText pilotName = (EditText) convertView.findViewById(R.id.editPilotName);
            String curPilotName = AppState.getInstance().deviceStates.get(i).pilotName;
            pilotName.setText(curPilotName);
        }
    }
}
 
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if (!Preferences.Lists.getScrollByButtons())
        return false;

    int action = event.getAction();

    ListView scrollView = getListView();
    int visibleItemsCount = scrollView.getLastVisiblePosition() - scrollView.getFirstVisiblePosition();

    int keyCode = event.getKeyCode();
    if(Preferences.System.isScrollUpButton(keyCode)){
        if (action == KeyEvent.ACTION_DOWN)
            scrollView.setSelection(Math.max(scrollView.getFirstVisiblePosition() - visibleItemsCount, 0));
        return true;// true надо обязательно возвращать даже если не ACTION_DOWN иначе звук нажатия
    }
    if(Preferences.System.isScrollDownButton(keyCode)){
        if (action == KeyEvent.ACTION_DOWN)
            scrollView.setSelection(Math.min(scrollView.getLastVisiblePosition(), scrollView.getCount() - 1));
        return true;// true надо обязательно возвращать даже если не ACTION_DOWN иначе звук нажатия
    }

    return false;
}
 
源代码5 项目: APDE   文件: GitHistoryActivity.java
public void selectItem(int num) {
	final ListView commitList = (ListView) getView().findViewById(R.id.git_history_commit_list);
	
	selectedItem = num;
	int selection = num - commitList.getFirstVisiblePosition();
	
	//Keep the selected commit on screen... with a little bit of breathing room
	if (num < commitList.getFirstVisiblePosition() + 2) {
		commitList.setSelection(num == 0 ? num : num - 1);
	} else if (num > commitList.getLastVisiblePosition() - 2) {
		commitList.setSelection(num == commitList.getCount() - 1 ? num : num + 1);
	}
	
	for (int i = 0; i < commitList.getCount(); i ++) {
		View child = commitList.getChildAt(i);
		
		if (child != null) {
			child.setBackgroundColor(selection == i
					? getResources().getColor(R.color.holo_select)
					: getResources().getColor(android.R.color.transparent));
		}
	}
}
 
源代码6 项目: NIM_Android_UIKit   文件: ListViewUtil.java
public static Object getViewHolderByIndex(ListView listView, int index) {
    int firstVisibleFeedPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount();
    int lastVisibleFeedPosition = listView.getLastVisiblePosition() - listView.getHeaderViewsCount();

    //只有获取可见区域的
    if (index >= firstVisibleFeedPosition && index <= lastVisibleFeedPosition) {
        View view = listView.getChildAt(index - firstVisibleFeedPosition);
        Object tag = view.getTag();
        return tag;
    } else {
        return null;
    }
}
 
源代码7 项目: easy-guide-android   文件: ListViewActivity.java
public View getViewByPosition(int pos, ListView listView) {
    final int firstListItemPosition = listView.getFirstVisiblePosition();
    final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

    if (pos < firstListItemPosition || pos > lastListItemPosition ) {
        return null;
    } else {
        final int childIndex = pos - firstListItemPosition;
        return listView.getChildAt(childIndex);
    }
}
 
源代码8 项目: trekarta   文件: DataList.java
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
    ListView listView = getListView();
    int count = listView.getCheckedItemCount();
    mode.setTitle(getResources().getQuantityString(R.plurals.itemsSelected, count, count));
    // Update (redraw) list item view
    int start = listView.getFirstVisiblePosition();
    for (int i = start, j = listView.getLastVisiblePosition(); i <= j; i++) {
        if (position == i) {
            View view = listView.getChildAt(i - start);
            listView.getAdapter().getView(i, view, listView);
            break;
        }
    }
}
 
@Override
public boolean canTargetScrollVertically(int direction) {
    final ListView target = mTarget;
    final int itemCount = target.getCount();
    if (itemCount == 0) {
        return false;
    }

    final int childCount = target.getChildCount();
    final int firstPosition = target.getFirstVisiblePosition();
    final int lastPosition = firstPosition + childCount;

    if (direction > 0) {
        // Are we already showing the entire last item?
        if (lastPosition >= itemCount) {
            final View lastView = target.getChildAt(childCount - 1);
            if (lastView.getBottom() <= target.getHeight()) {
                return false;
            }
        }
    } else if (direction < 0) {
        // Are we already showing the entire first item?
        if (firstPosition <= 0) {
            final View firstView = target.getChildAt(0);
            if (firstView.getTop() >= 0) {
                return false;
            }
        }
    } else {
        // The behavior for direction 0 is undefined and we can return
        // whatever we want.
        return false;
    }

    return true;
}
 
源代码10 项目: Onosendai   文件: ScrollState.java
public static ScrollState from (final ListView lv, final ScrollIndicator scrollIndicator, final ScrollDirection scrollDirection) {
	final int index = lv.getFirstVisiblePosition();
	final View v = lv.getChildAt(0);
	final int top = (v == null) ? 0 : v.getTop();

	final long itemId = lv.getAdapter().getItemId(index);
	if (itemId <= 0) return null;

	long time = ((TweetListCursorAdapter) lv.getAdapter()).getItemTime(index);
	if (time < 0L) time = 0L;

	return new ScrollState(itemId, top, time, scrollIndicator.getUnreadTime(), scrollDirection);
}
 
源代码11 项目: physical-web   文件: SwipeRefreshWidget.java
@Override
public boolean canChildScrollUp() {
  // The real child maps cares about is the list, so check if that can scroll.
  ListView target = (ListView) findViewById(android.R.id.list);
  return target.getChildCount() > 0
      && (target.getFirstVisiblePosition() > 0
      || target.getChildAt(0).getTop() < target.getPaddingTop());
}
 
源代码12 项目: AOSP-Kayboard-7.1.2   文件: WordListPreference.java
void onWordListClicked(final View v) {
    // Note : v is the preference view
    final ViewParent parent = v.getParent();
    // Just in case something changed in the framework, test for the concrete class
    if (!(parent instanceof ListView)) return;
    final ListView listView = (ListView)parent;
    final int indexToOpen;
    // Close all first, we'll open back any item that needs to be open.
    final boolean wasOpen = mInterfaceState.isOpen(mWordlistId);
    mInterfaceState.closeAll();
    if (wasOpen) {
        // This button being shown. Take note that we don't want to open any button in the
        // loop below.
        indexToOpen = -1;
    } else {
        // This button was not being shown. Open it, and remember the index of this
        // child as the one to open in the following loop.
        mInterfaceState.setOpen(mWordlistId, mStatus);
        indexToOpen = listView.indexOfChild(v);
    }
    final int lastDisplayedIndex =
            listView.getLastVisiblePosition() - listView.getFirstVisiblePosition();
    // The "lastDisplayedIndex" is actually displayed, hence the <=
    for (int i = 0; i <= lastDisplayedIndex; ++i) {
        final ButtonSwitcher buttonSwitcher = (ButtonSwitcher)listView.getChildAt(i)
                .findViewById(R.id.wordlist_button_switcher);
        if (i == indexToOpen) {
            buttonSwitcher.setStatusAndUpdateVisuals(getButtonSwitcherStatus(mStatus));
        } else {
            buttonSwitcher.setStatusAndUpdateVisuals(ButtonSwitcher.STATUS_NO_BUTTON);
        }
    }
}
 
源代码13 项目: aptoide-client   文件: FragmentSocialTimeline.java
private static boolean canListViewScrollUp(ListView listView) {
    if (android.os.Build.VERSION.SDK_INT >= 14) {
        // For ICS and above we can call canScrollVertically() to determine this
        return ViewCompat.canScrollVertically(listView, -1);
    } else {
        // Pre-ICS we need to manually check the first visible item and the child view's top
        // value
        return listView.getChildCount() > 0 &&
                (listView.getFirstVisiblePosition() > 0
                        || listView.getChildAt(0).getTop() < listView.getPaddingTop());
    }
}
 
源代码14 项目: buddycloud-android   文件: EndlessScrollListener.java
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
		int visibleItemCount, int totalItemCount) {
	boolean loadMore = firstVisibleItem + visibleItemCount + VISIBLE_THRESHOLD >= totalItemCount;
	if (loadMore && !loading && !refreshing) {
		fragment.fillMore();
	}

	// enable/disable pull-to-refresh
	SwipeRefreshLayout refreshLayout = fragment.getSwipeRefreshLayout();
	if (firstVisibleItem == 0 && refreshLayout != null) {
		refreshLayout.setEnabled(true);
	} else {
		refreshLayout.setEnabled(false);
	}

	// show/hide post "+" button
	final ListView lw = fragment.getPostStreamView();
	if (view.getId() == lw.getId()) {
		final int currentFirstVisibleItem = lw.getFirstVisiblePosition();
		if (currentFirstVisibleItem > mLastFirstVisibleItem) {
			fragment.hideAddPostTopicBtn();
		} else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
			fragment.showAddPostTopicBtn();
		}

		mLastFirstVisibleItem = currentFirstVisibleItem;
	}
}
 
源代码15 项目: YiBo   文件: MyHomeListAdapter.java
public boolean refresh() {
	if (listNewBlogs == null || listNewBlogs.size() == 0) {
		return false;
	}

	addCacheToFirst(listNewBlogs);
	int offset = listNewBlogs.size();
	listNewBlogs.clear();

	ListView lvMicroBlog = (ListView)((Activity)context).findViewById(R.id.lvMicroBlog);
	if (lvMicroBlog == null) {
		return true;
	}
	Adapter adapter = lvMicroBlog.getAdapter();
	if (adapter instanceof HeaderViewListAdapter) {
		adapter = ((HeaderViewListAdapter)adapter).getWrappedAdapter();
	}
	if (adapter == this) {
		int position = lvMicroBlog.getFirstVisiblePosition();
		View view = lvMicroBlog.getChildAt(0);
		int y = 0;
		if (view != null && position >= 1) {
		    y = view.getTop();
		    //System.out.println("y:" + y + " position:" + position);
		    position += offset;
		    lvMicroBlog.setSelectionFromTop(position, y);
		}
	}

	return true;
}
 
源代码16 项目: Dashchan   文件: ViewUnit.java
public void invalidateCommentView(ListView listView, int position) {
	if (position != ListView.INVALID_POSITION) {
		int first = listView.getFirstVisiblePosition();
		int count = listView.getChildCount();
		int index = position - first;
		if (index >= 0 && index < count) {
			View child = listView.getChildAt(index);
			PostViewHolder holder = (PostViewHolder) child.getTag();
			holder.comment.invalidate();
		}
	}
}
 
源代码17 项目: LogcatViewer   文件: LogcatViewerFloatingView.java
/**
 * Get list item view by position
 *
 * @param pos      position of list item.
 * @param listView listview object.
 * @return list item view associated with position in the listview.
 */
private View getViewByPosition(int pos, ListView listView) {
    final int firstListItemPosition = listView.getFirstVisiblePosition();
    final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

    if (pos < firstListItemPosition || pos > lastListItemPosition) {
        return listView.getAdapter().getView(pos, null, listView);
    } else {
        final int childIndex = pos - firstListItemPosition;
        return listView.getChildAt(childIndex);
    }
}
 
源代码18 项目: Bounce   文件: BounceTouchListener.java
private boolean hasHitTop() {
    if (mMainView instanceof ScrollView) {
        ScrollView scrollView = (ScrollView) mMainView;
        return scrollView.getScrollY() == 0;
    } else if (mMainView instanceof ListView) {
        ListView listView = (ListView) mMainView;
        if (listView.getAdapter() != null) {
            if (listView.getAdapter().getCount() > 0) {
                return listView.getFirstVisiblePosition() == 0 &&
                        listView.getChildAt(0).getTop() >= 0;
            }
        }
    } 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.findFirstCompletelyVisibleItemPosition() == 0;
                } else if (layoutManager instanceof StaggeredGridLayoutManager) {
                    StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager;
                    int[] checks = staggeredGridLayoutManager.findFirstCompletelyVisibleItemPositions(null);
                    for (int check : checks) {
                        if (check == 0)
                            return true;
                    }
                }
            }
        }
    }

    return false;
}
 
源代码19 项目: soas   文件: SwipeRefreshListFragment.java
/**
 * Utility method to check whether a {@link ListView} can scroll up from it's current position.
 * Handles platform version differences, providing backwards compatible functionality where
 * needed.
 */
private static boolean canListViewScrollUp(ListView listView) {
    if (SdkUtils.hasIceCreamSandwich()) {
        // For ICS and above we can call canScrollVertically() to determine this
        return ViewCompat.canScrollVertically(listView, -1);
    } else {
        // Pre-ICS we need to manually check the first visible item and the child view's top
        // value
        return listView.getChildCount() > 0 &&
                (listView.getFirstVisiblePosition() > 0
                        || listView.getChildAt(0).getTop() < listView.getPaddingTop());
    }
}
 
源代码20 项目: android-file-chooser   文件: UiUtil.java
public static int getListYScroll(@NonNull final ListView list) {
    View child = list.getChildAt(0);
    return child == null ? -1
        : list.getFirstVisiblePosition() * child.getHeight() - child.getTop() + list.getPaddingTop();
}