2013.03.19(7)———android scrollview和listview共存的问题
ScrollView嵌套GridView或者是ListView时,就会莫名其妙的出现问题,这里 我总结一下 我遇到的问题 总共有两个
1、listview显示不完整
参考:[url]http://www.2cto.com/kf/201204/127363.html[/url]
这个可以自定义一下listview,如下
这样 listview 就可以完整显示了
2、listview滚动加载失效
一般我写listview滚动加载 ,都是利用onScrollChange这个函数,如下
然后
但是 当ListView在Scrollview里面的时候 这个就不管用了 ,为了解决这个问题,我们可以监听scrollview滚动到底部的事件 然后 来加载listview数据
参考:http://gundumw100.iteye.com/blog/1164066
如下所示代码
ScrollView嵌套GridView或者是ListView时,就会莫名其妙的出现问题,这里 我总结一下 我遇到的问题 总共有两个
1、listview显示不完整
参考:[url]http://www.2cto.com/kf/201204/127363.html[/url]
这个可以自定义一下listview,如下
public class MyListView extends ListView {
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, android.util.AttributeSet attrs) {
super(context, attrs);
}
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
这样 listview 就可以完整显示了
2、listview滚动加载失效
一般我写listview滚动加载 ,都是利用onScrollChange这个函数,如下
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState == OnScrollListener.SCROLL_STATE_IDLE){
if(view.getLastVisiblePosition()==(view.getCount()-1)){
this.loadData();
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
然后
mLst.setOnScrollListener(this);
但是 当ListView在Scrollview里面的时候 这个就不管用了 ,为了解决这个问题,我们可以监听scrollview滚动到底部的事件 然后 来加载listview数据
参考:http://gundumw100.iteye.com/blog/1164066
如下所示代码
mScl.setOnTouchListener(this);
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_UP:
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SCROLL_BOTTOM), 200);
break;
default:
break;
}
return false;
}
//handler
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(_dialog!=null && _dialog.isShowing()){
_dialog.dismiss();
}
switch(msg.what){
case MSG_SCROLL_BOTTOM:
if (mLayRoot.getHeight() <= mScl.getScrollY() + mScl.getHeight()) {//判断是否触底
System.out.println("on bottom!");
if(mIndexStart==0){
if(mArrComment.size() >= (mIndexShow-1) * DBOpenHelper.PAGE_COUNT){
mPrg.setVisibility(View.VISIBLE);
new Thread(new LoadCommentThread()).start();
}
}
}
break;
}
}
};