如何让listview滚动到顶部底部

好记性不如烂笔头(7)
有时候聊天记录用ListView完成的时候,需要用户打开界面的时候,ListView定位在底部,可用如下代码来实现:
gd_listview.setSelection(gd_listview.getBottom());
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8439次
排名:千里之外
原创:17篇
(1)(2)(1)(1)(2)(1)(4)(2)(1)(3)(5)android ListView 自动滚动到最底部
android ListView 自动滚动到最底部
如何让你的ListView实现自动滚动呢? Android其实已经考虑到ListView控件的智能滚动操作。直接在Layout中写即可,注意下面的stackFromBottom以及 transcriptMode这两个属性。涉及代码如下:& ListView android:id="listCWJ"android:layout_width="fill_parent"android:layout_height="fill_parent"android:stackFromBottom="true"android:transcriptMode="alwaysScroll"/&notice:stackFromBottom设置为true,表示列表内容从下面开始显示transcriptMode设置为alwaysScroll的话,当内容满屏的时候自动滚动显示最后一条。&nbsp&#8250&nbsp&nbsp&#8250&nbsp
获取ListView当前滚动的距离(高度)
原本以为ListView的OnScrollListener中onScroll方法可以得出ListView的滚动高度,public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {第一个参数AbsListView有getScrollY方法,以为这个getScrollY的值就是ListView的滑动高度了,但是经过测试getScrollY得到的值一直是0。后来看了网上的一些资料,才知道ListView没有提供得到滚动高度的任何方法,必须自己根据getChildAt(0).top和getFirstVisiblePosition()来综合计算获得。代码如下:public int getScrollY() {
View c = mListView.getChildAt(0);
if (c == null) {
int firstVisiblePosition = mListView.getFirstVisiblePosition();
int top = c.getTop();
return -top + firstVisiblePosition * c.getHeight() ;
其原理是假设每个item的高度是一定的(多数情况下的确如此),那么只要知道当前在第几个item,就可以计算出总的高度,因为第一个可见item的一部分可能已经移出了边界,所以再通过mListView.getChildAt(0)获得第一个子view,使用getTop()方法计算出这个偏差。综合起来就可以计算出当前ListView的滚动高度。虽然上面的方法只是适用于listView 的每个子项高度一定的情况,不过已经解决了大多数问题了。
上一篇: 概述 Android系统的底层库由c/c++编写,上层Android应用程序通过Java虚拟机调用底层接口,衔接底层c/c++库与Java应用程序间的接口正是JNI(Java Native Interface)。本文将描述如何在Ubuntu下配置Android JNI的开发环境,以及如何编写一个简单的c函数库和JNI
下一篇: 下面的代码应该很多人都熟悉: ?xml version="1.0" encoding="utf-8"?selector xmlns:android="/apk/res/android" item android:drawable="@drawable/numpad_button_bg_selected" android:state_selected="true"/item item androi6208人阅读
如何判断 ListView 滑动到顶部和底部?网上一搜,最多的答案都是这样的:
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (firstVisibleItem == 0) {
Log.d(&ListView&, &##### 滚动到顶部 #####&);
} else if ((firstVisibleItem + visibleItemCount) == totalItemCount) {
Log.d(&ListView&, &##### 滚动到底部 ######&);
这一段代码并不能够精确地判断 ListView 是否到达最顶部或者最底部。因为只要ListView中第一个item出现在屏幕上端,即使只出现一部分,firstVisibleItem 的值也依然为0, onScroll()回调就会发生; 同样ListView 的最后一个 item 即使只显示一部分,((firstVisibleItem + visibleItemCount) == totalItemCount) 的值也是等于totalItemCount。
那么倒底如何精确判断 ListView 是否滚动到顶部或者底部?
一、首先想到的是 ListView.onScrollChanged()
这个函数是protected,直接引用不到,但是可以继承ListView类,然后重写这个函数:
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
Log.d(&ListView&, String.format(&onScrollChanged: l = %d, t = %d, oldl = %d, oldt = %d, ScrollY = %d&, l, t, oldl, oldt, this.getScrollY()));
if (t == 0) {
Log.d(&ListView&, &onScrollChanged &----滚动到顶部-----&&);
}经过测试发现:ListView的&onScrollChanged()&以及&getScrollX() 和 getScrollY() 总是返回0,根本不起作用。但是对于Android ScrollView 这三个函数都是有效的,为什么ListView就不起作用呢?尼玛,绝对没有想到Android 这么坑爹!
二、只能继续改进&ListView.setOnScrollListener()&
1. 改进是否滚动到顶部:增加判断第一个 item 距离 ListView 顶部的距离是否为 0
if (firstVisibleItem == 0) {
View firstVisibleItemView = mListView.getChildAt(0);
if (firstVisibleItemView != null && firstVisibleItemView.getTop() == 0) {
Log.d(&ListView&, &##### 滚动到顶部 ######&);
}2. 改进是否滚动到底部:增加判断当前屏幕中可见的最后一个 item 的底端距离 ListView 的顶端是否为 ListView 的高度:
if ((firstVisibleItem + visibleItemCount) == totalItemCount) {
View lastVisibleItemView = mListView.getChildAt(mListView.getChildCount() - 1);
if (lastVisibleItemView != null && lastVisibleItemView.getBottom() == mListView.getHeight()) {
Log.d(&ListView&, &##### 滚动到底部 ######&);
}全部完整代码如下:
mListView.setOnScrollListener(new OnScrollListener() {
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (firstVisibleItem == 0) {
View firstVisibleItemView = mListView.getChildAt(0);
if (firstVisibleItemView != null && firstVisibleItemView.getTop() == 0) {
Log.d(&ListView&, &##### 滚动到顶部 #####&);
} else if ((firstVisibleItem + visibleItemCount) == totalItemCount) {
View lastVisibleItemView = mListView.getChildAt(mListView.getChildCount() - 1);
if (lastVisibleItemView != null && lastVisibleItemView.getBottom() == mListView.getHeight()) {
Log.d(&ListView&, &##### 滚动到底部 ######&);
public void onScrollStateChanged(AbsListView view, int scrollState) {
//do nothing
});经过测试发现:上述代码能够正确判断 ListView 是否滚动到顶部或者底部
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:363601次
积分:4992
积分:4992
排名:第5652名
原创:137篇
转载:54篇
评论:77条
(1)(2)(14)(6)(5)(1)(1)(2)(3)(1)(2)(2)(5)(13)(8)(2)(13)(6)(9)(4)(6)(11)(20)(15)(3)(12)(13)(3)(1)(1)(1)(3)(2)Android上如何将快速滚动条显示在listview的左侧 - ITeye问答
因为阿拉伯语的需要,需要将listview的快速滚动条显示在左侧,请问有什么办法能实现这个效果?
先谢了
试试这个代码,应该可以实现你想要的效果。getListView().scrollTo(x, y);
和系统有关,android的原生系统是在右边不能改的。一般程序员也不要更改这个。
已解决问题
未解决问题

我要回帖

更多关于 listview自动滚动 的文章

 

随机推荐