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"
就可以了。

Android ScrollView 和ListView 一起使用的问题汇总的更多相关文章

  1. Android ScrollView与ListView的冲突解决办法汇总

    1. public  void setListViewHeight(){ ListAdapter listadapter = lv.getAdapter(); if (listadapter == n ...

  2. Android ScrollView 嵌套 ListView、 ListView 嵌套ScrollView Scroll事件冲突解决办法

    本人菜鸟一名,最近工作了,开始学习Android. 最近在做项目的时候,UX给了个design,大概就是下拉刷新的ListView中嵌套了ScrollView,而且还要在ScrollView中添加动画 ...

  3. android scrollview嵌套listview计算高度的问题

    ScrollView中只能放一个控件,一般都放LinearLayout,orientation属性值为vertical.在LinearLayout中放需要呈现的内容.ListView也在其中,List ...

  4. Android ScrollView和ListView联用,且ListView可以下拉刷新和上拉加载

    ScrollView嵌套listView且ListView可以实现上拉加载. 由于代码太长,在此只提供实现思路: 先不说上拉加载的事,咱们先回想一下,ScrollView和LsitView联用,时的解 ...

  5. Android ScrollView 嵌套ListView的替代方案

    概要:本例仅提供替代思路. 原需求:实现下图这个布局 要求:头部菜单固定,实现Viewpager.中间的按钮菜单,底部的listview一起能够上下滚动. 做法: 把Viewpager.中间的按钮菜单 ...

  6. android:ScrollView嵌套ListView的问题

    在ScrollView中嵌套使用ListView,看起来ListView只会显示一行多一点,不能滑动.ListView的高度怎么改都有问题,与预期不符合.搜索了一些解决方案,我觉得最好不要用这样的设计 ...

  7. Android scrollview嵌套listview运行后最先显示出来的位置不在顶部而是中间问题

    scrollview里面嵌套了一个listview ,通过设置一个方法设置了listview的高度 现在的情况就是进到这个界面的时候看到的不是最上面 而是中间 ,该问题的解决办法为: mScrollV ...

  8. Android ScrollView和ListView滑动冲突解决记录

    private int mLastX; private int mLastY; public View.OnTouchListener onTouchListener = new View.OnTou ...

  9. android 有弹性的ScrollView 简单实现,与处理ScrollView和ListView,GridView之间的冲突

    处理ScrollView和ListView,GridView之间的冲突, 最好的办法就是继承这两个类,重写他们的onMeasure方法即可: ListView: import android.widg ...

随机推荐

  1. PHP输入流php://input与$_POST、$_GET

    Content-Type的取值会影响php的输入流 学习笔记 1,Content-Type仅在取值为application/x-www-data-urlencoded和multipart/form-d ...

  2. 未能加载文件或程序集“System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。系统找不到指定的文件。

    问题:WPF未能加载文件或程序集"System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ...

  3. java 集合排序

    Java API针对集合类型排序提供了两种支持:java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.ut ...

  4. sql sever读取写入Excel总结

    主要用到openrowset,opendatasource系统函数,这两个函数任意一个都能完成任务 用这种方法可以实现Excel和sqlserver表之间的相互导入导出. 如果使用openrowset ...

  5. oozie java api提交作业

    今晚试验用java的api来提交代码,由于代码是在我机器上写的,然后提交到我的虚拟机集群当中去,所以中间产生了一个错误..要想在任意一台机器上向oozie提交作业的话,需要对hadoop的core-s ...

  6. 彻底清除Github上某个文件以及历史

    注意:如下操作会删除选中的文件以及历史记录,若你想保留最新版本的记录,请做好备份. cd进入到你的本地项目文件夹,然后依次执行下面6行命令即可: git filter-branch --force - ...

  7. PHP的Try, throw 和 catch

    PHP的Try, throw 和 catch   Try, throw 和 catch Try - 使用异常的函数应该位于 "try" 代码块内.如果没有触发异常,则代码将照常继续 ...

  8. UPNP

    基本概念 UPnP 的应用范围非常大,以致足够可以实现许多现成的.新的及令人兴奋的方案,包括家庭自动化.打印.图片处理.音频 / 视频娱乐.厨房设备.汽车网络和公共集会场所的类似网络.它可以充分发挥 ...

  9. myeclipse重新添加spring支持

    需求:添加一次可能失败,需要再添加,但是一般点击右键add spring capabilities 不存在了 解决办法: 打开工程找到.project 注释掉spring支持 重新项目右键加入支持即可 ...

  10. Java如何格式化24小时格式的时间?

    在Java中,如何格式化24小时格式的时间?? 此示例使用SimpleDateFormat类的sdf.format(date)方法将时间格式化为24小时格式(00:00-24:00). package ...