今天工作时,想起一个问题,就是每次遇到的问题可以收集起来,多看几遍,就没问题了,故此,在这里收集自己工作或学习中的问题及其解决方法,现在是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;
}