最近做项目中用到ScrollView和ListView一起使用的问题,显示的时候ListView不能完全正确的显示
首先,ListView不能直接用,要自定义一个,然后重写onMeasure()方法:
public class MyListView extends ListView {
public MyListView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
第二步:写个计算listView每个Item的方法
public void setListViewHeightBasedOnChildren(ListView listView) {
// 获取ListView对应的Adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
第三步:listview添加适配器后设置高度即可
listView.setAdapter(adapter);
new ListViewUtil().setListViewHeightBasedOnChildren(listView);
详细出处参考:http://www.jb51.net/article/37202.htm
分享到:
相关推荐
当在一个ScrollView中嵌套一个ListView时,可能会遇到一些特定的问题,尤其是在实现下拉刷新功能时。本文将深入探讨这些问题及其解决方案。 ### 问题1:滑动冲突 由于ScrollView和ListView都具有滚动功能,它们之间...
然而,由于ScrollView自身并不支持滚动事件的监听,因此当我们在ScrollView中嵌套可滚动的组件如ListView或GridView时,可能会遇到滚动冲突问题。为了解决这个问题,开发者需要手动处理滚动事件,或者选择使用如...
2. **使用Header和Footer**:如果只是想在ListView顶部或底部添加一个固定的ScrollView,可以考虑使用ListView的addHeaderView()和addFooterView()方法,将ScrollView作为头部或尾部添加,这样就不需要嵌套,避免了...
4. **使用`HeaderView`或`FooterView`**:有时可以通过在ListView的头部或尾部添加固定高度的视图,模拟ScrollView的效果,但这种方法限制了ScrollView的灵活性。 5. **使用第三方库**:还有一些第三方库,如`...
当ScrollView中嵌套ListView或者GrideView时,listView和GrideView不能完全显示的时候
很多朋友因项目需求问题需要在ScrollView中嵌套使用ListView或ScrollView 但是彼此的滑动事件会发生冲突,网上大多数都是计算ListView的高度来解决这个问题,但个人亲手尝试 结果ListView的Item要是过多的话ListView...
通过上述方式,我们可以有效地解决ScrollView嵌套ListView的滚动冲突问题,使得两者能够协同工作,提供良好的用户体验。在"demo"项目中,你可以找到一个实际的应用示例,通过运行和调试,更深入地理解这个解决方案的...
在提供的`ListViewMeasureDemo`项目中,开发者可能已经实现了这些步骤,通过代码示例展示了如何解决ScrollView嵌套ListView时的高度计算问题。你可以通过查看该项目的代码,学习如何在实际开发中应用这种方法。 总...
1. **使用NestedScrollView替代ScrollView**:NestedScrollView是Android Support Library中的一个组件,它内置了对嵌套滑动的支持,能很好地处理嵌套在其中的ListView或RecyclerView的滑动事件。 2. **自定义...
ScrollView嵌套ViewPager,ViewPager横向滑动时容易上下滚动处理;...ScrollView嵌套ListView,ListView滚动事件处理,可滚动; ScrollView子控件获取焦点后自动置顶问题处理。 ListView滚动到顶或到底事件监听。
在Android开发中,ScrollView和ListView的嵌套是一个常见的需求,但也是一个挑战,因为它们都是滚动视图,直接组合可能导致冲突和不可预期的行为。本篇文章将详细介绍四种解决ScrollView嵌套ListView问题的方法,...
当在一个ScrollView中嵌套一个ListView时,可能会遇到一些问题,比如ListView显示不全或者只显示一个条目。这些问题通常由于两者的滚动机制冲突导致,因为两者都具有滚动功能,系统可能无法正确处理它们之间的交互。...
用于解决scrollview组件嵌套listview组件时候 两者之间的冲突问题
3. **自定义ListView**:创建一个自定义的ListView,重写onMeasure()方法,使其返回精确的高度,这样ScrollView就能正确计算出内容的高度。但这需要对测量和布局流程有深入理解,对初学者来说可能有些复杂。 4. **...
总之,嵌套ScrollView、ListView和GridView需要开发者对Android视图系统有深入理解,合理使用这些组件可以创建出复杂而功能丰富的用户界面,但同时也需要妥善处理可能出现的滚动冲突和性能问题。在实际项目中,应该...
然而,当在一个ScrollView中嵌套一个ListView时,会遇到一系列的问题,主要是由于两者都具有滚动功能,导致冲突,用户体验受到影响。本文将探讨几种解决这种问题的方案。 ### 方案一:使用NestedScrollView替代...
4. **限制ListView的高度**:给ListView设置一个合适的高度,以防止其占用整个ScrollView的空间,可以通过计算数据数量和行高来动态设置。 5. **使用RecyclerView替换ListView**:RecyclerView是Android Lollipop及...
当需要在一个界面中同时展示大量数据和一些额外内容时,可能会将ListView嵌套在ScrollView中,但这种做法往往会导致滑动冲突的问题,即用户难以确定是想滚动整个ScrollView还是单独滑动ListView。本文将深入探讨这个...
总结来说,解决ScrollView嵌套ListView显示不全的问题,可以通过重写ListView的`onMeasure`方法、设置ScrollView的`fillViewport`属性、使用LinearLayout或NestedScrollView,以及用RecyclerView替换ListView。...
这时,可以监听ScrollView的滚动事件,根据滚动位置动态调整ListView的可见性或滚动状态。 6. 使用ViewStub:如果ListView中的数据项数量较少,可以考虑使用ViewStub。ViewStub是一种轻量级的视图,初始时不占用...