`

2013.03.19(7)———android scrollview和listview共存的问题

阅读更多
2013.03.19(7)———android scrollview和listview共存的问题


ScrollView嵌套GridView或者是ListView时,就会莫名其妙的出现问题,这里 我总结一下 我遇到的问题 总共有两个



1、listview显示不完整

参考:http://www.2cto.com/kf/201204/127363.html

这个可以自定义一下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;
        }
    }
    
};






分享到:
评论
1 楼 hold_on 2013-03-27  
我想不通 用listView的时候为什么要用scrollView再包裹一层,
难不成scrollView里还包含其他组件,假如是的话,那么ACTION_MOVE
事件是scrollView响应还是listView响应,应该有个明确的需求吧

然后再通过onInterceptTouchEvent 来决定是否要拦截事件

相关推荐

    android中scrollview与listview共存

    下面我们将详细探讨如何在Android中正确实现ScrollView和ListView的共存,以及如何处理可能遇到的问题。 首先,理解ScrollView和ListView的特性是关键。ScrollView是一个可以容纳多个子视图并允许整体滚动的容器,...

    解决Scrollview嵌套listview下拉刷新的一些问题

    在Android开发中,ScrollView和ListView是...总的来说,处理ScrollView和ListView的嵌套问题需要对Android布局有深入理解,同时也要关注性能和用户体验。合理的设计和优化能够帮助我们构建出流畅、功能完善的移动应用。

    scrollview与listview共存

    综上所述,解决ScrollView与ListView共存问题的关键在于合理利用Android提供的组件和特性,如NestedScrollView、Header/Footer视图、ViewHolder模式等。同时,通过监听和处理滚动事件,可以实现ListView的自动翻页...

    Android ScrollView嵌套ListView嵌套GridView的上下拉以及加载更多

    总的来说,Android开发中的ScrollView嵌套ListView和GridView是一项挑战,但通过巧妙地使用SwipeRefreshLayout、自定义适配器和滚动事件处理,我们可以构建出高效且功能丰富的用户界面。同时,不断优化性能和用户...

    Android解决ScrollView和ListView冲突问题Demo

    在Android开发中,ScrollView和ListView是两种常用的布局组件。ScrollView是一个可以包含多个子视图并允许用户滚动查看全部内容的视图容器,而ListView则是一个用于显示大量数据且支持滚动的视图,通常用于实现列表...

    解决ScrollView嵌套ListView Demo

    在Android开发中,ScrollView和ListView是两种常用的布局组件。ScrollView是一个可以滚动的视图容器,它允许其内容超出屏幕大小。而ListView则用于显示一列可滚动的项目,通常用于展示大量的数据。当在一个布局中...

    scrollview与listview,viewpager共存

    在Android开发中,ScrollView、ListView和ViewPager是三个非常常见的组件,它们各自有着不同的用途和功能。当需要在同一个布局中同时使用这三个组件时,开发者可能会遇到一些挑战,因为它们本质上都是处理滚动行为的...

    android ScrollView,ListView 截屏并保存到图库

    在Android开发中,有时我们需要实现一个功能,即对ScrollView或ListView等滚动视图进行截图,并将截图保存到用户的图库中。这个功能在许多应用场景下非常有用,比如社交媒体分享、应用内部保存用户浏览记录或者创建...

    android ScrollView和ListView固定底部

    在Android开发中,ScrollView和ListView是两种常用的布局控件,它们各自有特定的用途,但有时在实际应用中,我们可能需要将它们结合使用,以实现特定的界面效果,比如在滚动时保持底部元素固定可见。这篇博文主要...

    解决scrollView和listview滚动冲突,实现listview滑动到顶端和底部之后还能拖拽一定的距离,松开后返回

    在Android开发中,ScrollView和ListView是两种常用的布局组件,它们分别用于实现可滚动的大视图和展示多行可滚动的数据列表。然而,在实际应用中,当这两种组件同时存在于一个界面时,滚动冲突的问题就会出现,导致...

    android scrollview嵌套listview

    在Android开发中,ScrollView和ListView都是非常常用的控件。ScrollView是一个可滚动的视图容器,能够包含一个或多个视图,并允许用户上下滑动查看超出屏幕的内容。而ListView则是一个显示多行数据的视图,通常用于...

    Android scrollview嵌套listview

    在Android开发中,ScrollView和ListView都是非常常见的视图组件。ScrollView是一个可以滚动的布局容器,它允许用户滚动包含的内容,而ListView则是一个可滚动的列表,通常用于显示大量数据集。当需要在一个页面中...

    android 解决ScrollView和listView嵌套冲突问题(保证在ScrollView中滑动listView只响应listView的滑动)

    在Android开发中,ScrollView和ListView的嵌套是一个常见的需求,但同时也伴随着许多技术挑战,主要问题在于两者都具有滚动功能,导致冲突,使得用户在滚动时可能会遇到不确定的行为。本篇将详细介绍如何解决这种...

    Android中自定义ListView,解决scrollview嵌套listview 滑动事件冲突

    在Android开发中,ListView是用于显示大量数据列表的常用组件,而ScrollView则是一个可以垂直滚动的视图容器,常用于包含多个子视图。当在一个ScrollView内嵌套一个ListView时,由于两者都具有滑动功能,可能会导致...

    ScrollView嵌套ListVIew两者之间滑动问题

    在Android开发中,ScrollView和ListView都是非常常见的视图组件。ScrollView是一个可以包含多个子视图,并允许用户滚动查看所有内容的容器。而ListView则用于显示大量的数据集,通常以垂直列表的形式展示,支持滚动...

    ScrollView与ListView的滑动冲突

    在Android开发过程中,我们经常会遇到ScrollView与ListView或GridView组合使用时出现的滑动冲突问题。这类问题通常表现为:当ScrollView内部包含一个ListView或GridView时,用户滑动屏幕时可能无法正常滚动列表中的...

    Android_ScrollView与ListView_GridView共存冲突解决方案

    由于ListView和GridView都继承自ScrollView,所以在ScrollView中再嵌套ScrollView会导致高度计算的问题。这会使得内部的ScrollView无法正常工作,因为它无法确定自身应该多高。这个问题在界面元素多、数据量大的情况...

    android listview ScrollView冲突 listview checkbox

    在Android开发中,ListView与ScrollView的使用经常会产生冲突,因为两者都是用来展示多行数据的控件,但它们的工作机制有所不同。ListView通过复用Item视图来提高性能,而ScrollView则将所有子视图一次性加载到内存...

Global site tag (gtag.js) - Google Analytics