zoukankan      html  css  js  c++  java
  • Android ScrollView 和ListView 一起使用的问题汇总

    1.ScrollView 嵌套 ListView  ,touch事件的截获问题。

    参考 http://www.cnblogs.com/lqminn/archive/2013/03/02/2940194.html
    http://blog.csdn.net/chaihuasong/article/details/17499799

    _scrollView.requestDisallowInterceptTouchEvent(true);

    这句话的意思是告诉scrollView,滚动的事件交给我处理。用完以后记得还回去

    _scrollView.requestDisallowInterceptTouchEvent(false);

    如果不设置回去,ScrollView将无法滚动了。

    2.ScrollView 滚动时,ListView的第一个条目是否处于显示状态?

    参考 http://stackoverflow.com/questions/4628800/android-how-to-check-if-a-view-inside-of-scrollview-is-visible

    boolean checkNeedRefresh() {
            Rect scrollBounds = new Rect();
            View firstChild = listView.getChildAt(0);
            _scrollView.getHitRect(scrollBounds);
            if (firstChild.getLocalVisibleRect(scrollBounds)) {
                // Any portion of the firstChild, even a single pixel, is within the
                // visible window
                return true;
            } else {
                // NONE of the firstChild is within the visible window
                return false;
            }
        }

    3. listView不能显示完整

    参考 http://blog.csdn.net/hahashui123/article/details/39177057
    http://blog.csdn.net/solomonxiang/article/details/26507145

    public static void setListViewHeight(ListView listView) {
            try {
                int totalHeight = 0;
                ListAdapter adapter = listView.getAdapter();
                for (int i = 0, len = adapter.getCount(); i < len; i++) { // listAdapter.getCount()
                    View listItem = adapter.getView(i, null, listView);
                    listItem.setLayoutParams(new LayoutParams(
                            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    
                    listItem.measure(0, 0); 
                    totalHeight += listItem.getMeasuredHeight(); 
                }
    
                ViewGroup.LayoutParams params = listView.getLayoutParams();
                params.height = totalHeight
                        + (listView.getDividerHeight() * (listView.getCount() - 1));
                listView.setLayoutParams(params);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

    顺带GridView

    public static void setGridViewHeight(GridView gridView, int numColumns) {
            try {
                ListAdapter adapter = gridView.getAdapter();
                int row = 3;
                View listItem = adapter.getView(0, null, gridView);
                if (listItem == null)
                    return;
                listItem.setLayoutParams(new LayoutParams(
                        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                listItem.measure(0, 0); 
                int totalHeight = listItem.getMeasuredHeight() * row
                        + (gridView.getVerticalSpacing() * (row - 1));
                ViewGroup.LayoutParams params = gridView.getLayoutParams();
                params.height = totalHeight;
                gridView.setLayoutParams(params);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

     如果ListView 带有BottomView

    public static void setListViewHeight(ListView listView) {
            try {
                int totalHeight = 0;
                int bottomHeight = 0;
                ListAdapter dataAdapter = null;
                int totalItems = 0;
                ListAdapter adapter = listView.getAdapter();
                if (adapter instanceof HeaderViewListAdapter) {
                    HeaderViewListAdapter headerViewListAdapter = ((HeaderViewListAdapter) adapter);
                    dataAdapter = headerViewListAdapter.getWrappedAdapter();
                    totalItems = dataAdapter.getCount();
                    int allItems = headerViewListAdapter.getCount();
                    View bottomItem = headerViewListAdapter.getView(allItems - 1,
                            null, listView);
                    bottomItem.measure(0, 0);
                    bottomHeight = bottomItem.getMeasuredHeight();
    
                } else {
                    dataAdapter = adapter;
                }
    
                for (int i = 0, len = totalItems; i < len; i++) {
                    View listItem = dataAdapter.getView(i, null, listView);
                    listItem.setLayoutParams(new LayoutParams(
                            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    
                    listItem.measure(0, 0);
                    totalHeight += listItem.getMeasuredHeight();
                }
    
                int listviewCount = listView.getCount();
                int height = totalHeight
                        + (listView.getDividerHeight() * listviewCount + 1)
                        + bottomHeight;
    
                ViewGroup.LayoutParams params = listView.getLayoutParams();
                params.height = height;
                listView.setLayoutParams(params);
                listView.requestLayout();
                 
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

    4. 其他,自定义控件实现ListView

    http://www.cnblogs.com/lesliefang/p/3587154.html 

     5. 发现 每次加载完成后,listview总是滚到 屏幕最上方,实际上listview上面还有东西被盖住了,解决办法如下

      <ScrollView
            android:id="@+id/scrollView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:descendantFocusability="blocksDescendants"
                android:orientation="vertical" >

    最关键的一句, 找到srcollview的 内容控件,一般是 LinearLayout,加上属性  android:descendantFocusability="blocksDescendants"
    就可以了。

  • 相关阅读:
    Hadoop 学习笔记 (十) hadoop2.2.0 生产环境部署 HDFS HA Federation 含Yarn部署
    hadoop 2.x 安装包目录结构分析
    词聚类
    Hadoop 学习笔记 (十一) MapReduce 求平均成绩
    Hadoop 学习笔记 (十) MapReduce实现排序 全局变量
    Hadoop 学习笔记 (九) hadoop2.2.0 生产环境部署 HDFS HA部署方法
    Visual Studio Code 快捷键大全(Windows)
    Eclipse安装教程 ——史上最详细安装Java &Python教程说明
    jquery操作select(取值,设置选中)
    $.ajax 中的contentType
  • 原文地址:https://www.cnblogs.com/xiaokang088/p/4184617.html
Copyright © 2011-2022 走看看