您的位置:首页 > 移动开发 > Android开发

android ListView开发问题及方法

2015-08-03 20:29 465 查看
今天工作时,想起一个问题,就是每次遇到的问题可以收集起来,多看几遍,就没问题了,故此,在这里收集自己工作或学习中的问题及其解决方法,现在是listview遇见的问题,后面慢慢添加,有更多的方法和简洁请回复

1.ListView和GridView滑动到顶部和底部时出现的阴影消除方法:

android2.3以前用android:fadingEdge="none"

android2.3以后用setOverScrollMode(View.OVER_SCROLL_NEVER) ,

android:overScrollMode="never"

2.ListView布局更新问题

ListView.requestLayout();

3.ListView Item在垂直方向滑动居中显示

代码如下:

private int  ITEM_HEIGHT=80;
private int  mPostion=-1;
private int autoScroll=0;

Runnable autoRunnable=new Runnable() {

@Override
public void run() {
mListView.smoothScrollBy(autoScroll, 300);

}
};

//listview 滑动监听
OnScrollListener mListViewScrollListener=new OnScrollListener() {

@Override
public void onScrollStateChanged(AbsListView listview, int scrollState) {
mHandler.removeCallbacks(autoRunnable);
if(scrollState==0){
View cureentView = mNotificationItemAdapter.getConvertView();
if(cureentView!=null){
int top = cureentView.getTop();
autoScroll=top-mPostion;
mHandler.postDelayed(autoRunnable, 50);
}
}

}

@Override
public void onScroll(AbsListView view,
int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
int scrollY = getScrollToY();
if (mNotificationItemAdapter != null) {
for (int i = 0; i < mNotificationItemAdapter.getCount(); i++) {
if (scrollY >= i * ITEM_HEIGHT
&& scrollY < (i + 1) * ITEM_HEIGHT
- ITEM_HEIGHT / 2) {
if (mPostion == i) {// 避免同一个位置不停动画
return;
}
mNotificationItemAdapter.setSelectPostion(i);
mPostion = i;
break;
} else if (scrollY >= i * ITEM_HEIGHT
&& scrollY < (i + 1) * ITEM_HEIGHT) {
if (mPostion == i + 1) {// 避免同一个位置不停动画
return;
}
mNotificationItemAdapter.setSelectPostion(i + 1);
mPostion = i + 1;
}
}

}

}
};

//获取滑动的y位置
public int getScrollToY() {
View c = mListView.getChildAt(0);
if (c == null) {
return 0;
}
int firstVisiblePosition = mListView.getFirstVisiblePosition();
int top = c.getTop();
int headerHeight = 0;
return -top + firstVisiblePosition * c.getHeight() + headerHeight;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: