scrollView嵌套的listview里又嵌套了GridView,实现下拉刷新和加载更多(附源码)亲测可用
2016-09-08 18:35
344 查看
ScrollView嵌套ListView/GridView显示不全的问题,重写ListView/GridView的onMeasue()方法即可。
ListView里如果又嵌套了GridView,重写GridView中的onMeasue()方法即可,如下所示。
如下所示加入一行代码即可,构造函数最好把三个写全,万无一失,xml里默认调用的是带两个参数的构造函数。
1.将ListView的item布局里,那个最外层的GridView添加一个属性,android:descendantFocusability=”blocksDescendants”
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
2.在ListView绑定的adapter中,获取到GridView控件,然后设置:
ScrollView中嵌套ListView,默认显示的是底部,如果修改为默认显示顶部呢?
其实我想实现的是ScrollView嵌套ListView, ListView中又嵌套了GridView,ListView中的数据源是网络加载过来,需要实现加载数据、下拉刷新、加载更多。
单独的ListView下拉刷新可以用SwipeRefreshLayout,加载更多可以通过ListView实现onScrollListener来实现,详情见http://blog.csdn.net/zhenzhen9310/article/details/51126597。
而ScrollView中嵌套了ListView,ListView的滑动监听就失效了(与ScrollView中冲突了),虽然可以通过方法解决监听失效问题,但是我不喜欢事情变得太复杂了。
然后这里放弃了让listView监听滑动事件,这里可以采用两种方案,都亲测可用,方法好像差不多。
1. 使用SwipeRefreshLayout来实现下拉刷新和上拉加载功能即可,里面了嵌套ListView和GridView,listView外可包裹scrollView.
http://download.csdn.net/detail/zhenzhen9310/9625560 (免积分下载)
2.自定义一个LinearLayou来包裹住ListView,实现下拉刷新和加载更多的功能。
http://download.csdn.net/detail/zhenzhen9310/9625546
(免积分下载)
ListView里如果又嵌套了GridView,重写GridView中的onMeasue()方法即可,如下所示。
如下所示加入一行代码即可,构造函数最好把三个写全,万无一失,xml里默认调用的是带两个参数的构造函数。
public class MyListView extends ListView { public MyListView(Context context) { super(context); } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); } public MyListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }ListView里嵌套GridView,点击ListView的某个item不响应:(下面两步走)
1.将ListView的item布局里,那个最外层的GridView添加一个属性,android:descendantFocusability=”blocksDescendants”
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
2.在ListView绑定的adapter中,获取到GridView控件,然后设置:
<pre name="code" class="java">holder.imgGrid.setClickable(false); holder.imgGrid.setPressed(false); holder.imgGrid.setEnables(false);
ScrollView中嵌套ListView,默认显示的是底部,如果修改为默认显示顶部呢?
<pre name="code" class="java">listView.setFocusable(false); //ListView默认不获取焦点即可显示顶部
其实我想实现的是ScrollView嵌套ListView, ListView中又嵌套了GridView,ListView中的数据源是网络加载过来,需要实现加载数据、下拉刷新、加载更多。
单独的ListView下拉刷新可以用SwipeRefreshLayout,加载更多可以通过ListView实现onScrollListener来实现,详情见http://blog.csdn.net/zhenzhen9310/article/details/51126597。
而ScrollView中嵌套了ListView,ListView的滑动监听就失效了(与ScrollView中冲突了),虽然可以通过方法解决监听失效问题,但是我不喜欢事情变得太复杂了。
然后这里放弃了让listView监听滑动事件,这里可以采用两种方案,都亲测可用,方法好像差不多。
1. 使用SwipeRefreshLayout来实现下拉刷新和上拉加载功能即可,里面了嵌套ListView和GridView,listView外可包裹scrollView.
http://download.csdn.net/detail/zhenzhen9310/9625560 (免积分下载)
2.自定义一个LinearLayou来包裹住ListView,实现下拉刷新和加载更多的功能。
http://download.csdn.net/detail/zhenzhen9310/9625546
(免积分下载)
相关文章推荐
- Android scrollview中嵌套listview实现listview的下拉刷新上拉加载更多
- ListView和GridView利用pull-to-rerfesh 实现下拉刷新和上拉加载更多
- ListView、GridView实现下拉刷新上拉加载更多
- ListView,GridView和ScrollVIew嵌套实现上拉加载更多
- android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- GridView ListView ScrollView 下拉刷新 上拉加载更多
- Android自定义控件(二) 下拉刷新,上拉分页加载更多(支持ListView, GridView, ScrollView)
- 44、gridview实现下拉刷新、上拉加载更多(最简单实现上下拉操作的开源工程!)
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android ListView实现下拉刷新、加载更多
- Android 下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- ListView实现下拉刷新和上拉加载更多时遇到的诸多问题与解析
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- Android下拉刷新,上拉加载更多控件–支持ListView,GridView和ScrollView
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展