您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
安卓解决ScrollView嵌套ListView不能滚动
发布时间:2021-08-18 14:34:37编辑:雪饮阅读()
在安卓的界面布局中由于安卓一般的都是手机,手机尺寸毕竟比起电脑还是太小了,有时候界面上显示不了过多内容,那么此时scrollview的作用就显得很重要。
但是安卓这个scrollview做的还不是很完美,那么就是当内部嵌入listview时候,你会发现基本你只能看到这个listview的一部分,好像还就只是其的一个条目。那么当这个listview的子item比较多的时候,一般若不是嵌套的方式listview可以通过滚动(滑动)方式查看到不在可视区域的哪些item。但嵌入到scrollview中发现滚动无效了。
因为在你滑动时scrollview会跟着滑动,这是为什么呢?其实是你的ScrollView的滑动时间和Listview的滑动事件起冲突了,最后你会发现这样做不行啊,这根本不是我想要的效果啊,怎么办呢?
改进做法:
这样哈,上面不是说ScrollView和ListView的滑动事件不是起冲突了吗?那好,现在我们把ListView的滑动事件禁用掉,那么怎样禁用呢?我们可以这样,把ListView的每一项循环计算高度,这样ListView就不会有滑动效果了。
代码如下:使用下面的代码要注意了,ListView的Item最好是LinearLayout,当然也可以使用RelativeLayout但是要重新定义一下RelativeLayout这里就不再细说了,大家可以到网上查查,都能找到答案的。
public void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
((MarginLayoutParams) params).setMargins(10, 10, 10, 10);
listView.setLayoutParams(params);
}
那么我这里是只要listview的条目有变化,我都会执行下这个方法就好了。
关键字词:ScrollView,嵌套,ListView