Android ListView 和 ScrollView 冲突问题

近期做一款APP,当中有一个类似微博的评论功能的界面,先是列出微博的正文内容和图片等。然后下边是评论。

一開始就想着用一个ScrollView把主要内容和评论区的ListView包起来。然后加入各个控件的内容就可以(对,感觉上有点像这个CSDN博客的编辑界面嘛),可是写出来之后发现ListView仅仅显示出了一个条目的高度。并且不能滑动,网上搜了一下发现原因是ScrollView和ListView都是可滑动的,把它们放在一块会有冲突。最后还是ScrollView获得了焦点。ListView不能滑动。网上的解决方法最多的是在载入ListView时用getMeasure计算每一个条目和切割线的高度,然后相加,把结果设置为ListView控件的高度,只是貌似是仅仅适用于ListView每一个条目高度都一样的情况(没有试过。非常奇怪为什么会这样)。要么就是自己定义一个继承自ListView的控件,也是事先设置好ListView的高度。但这样总归比較麻烦。并且精确度不如由系统自己构造好。

懒癌发作实在不想自己去做这些事情,于是便想试一下比較投机的方法,就是在ListView的Adapter的getView方法中依据position构造不同的界面,即假设position是0,则用原来主要信息(微博正文,图片)的xml文件取inflate convertView,否则就用评论条目的xml去inflate,经试验果然可行。之后不死心想看下有没有更好的实现方法。去overflow上找了一下,发现有人推荐的方法和我的几乎相同。所以觉得这样的方法是比較好的,不须要做额外的工作,仅仅须要把inflate的工作由主Activity放在Adapter里就能够了。

getView方法

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
	/*主信息界面*/
	if(0 == position)
	{
		MainHolder holder = null;
		convertView = inflater.inflate(R.layout.info, parent, false);
		holder = new MainHolder();
		convertView.setTag(holder);
                ······
                ······
	}
	/*评论界面*/
	else
	{
		ItemHolder holder = null;
		convertView = inflater.inflate(R.layout.item, parent, false);
		holder = new ItemHolder();
		convertView.setTag(holder);
		······
		······
		return convertView;
	}
}
时间: 2024-10-09 23:07:52

Android ListView 和 ScrollView 冲突问题的相关文章

简单解决ListView和ScrollView冲突,复杂情况仅供参考

ScrollView嵌套ListView冲突问题的最优解决方案 (转) 记录学习之用 项目做多了之后,会发现其实 ScrollView嵌套ListVew或者GridView等很常用,但是你也会发现各种奇怪问题产生.根据个人经验现在列出常见问题以及代码最少最简单的解决方法. 问题一 : 嵌套在 ScrollView的 ListVew数据显示不全,我遇到的是最多只显示两条已有的数据. 解决办法:重写 ListVew或者 GridView,网上还有很多若干解决办法,但是都不好用或者很复杂. @Over

ListView和ScrollView冲突

当ListView放在ScrollView中的时候,无论你设置高度为 match_parent(填充父窗体)和wrap_content(包裹内容)都只显示一行,这是你把ListView放在LinearLayout 中,再给listview一个具体的高度,就可以显示多行了. 如: <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> <L

Android ListView,GridView,ScrollView,ProgressBar,SeekBar,RelativeLayout,EditText常用属性

ListView的一些特殊属性: 1.ListView的XML属性 [java] view plaincopy android:divider//在列表条目之间显示的drawable或color android:dividerHeight//用来指定divider的高度 android:entries//构成ListView的数组资源的引用.对于某些固定的资源,这个属性提供了比在程序中添加资源更加简便的方式 android:footerDividersEnabled//当设为false时,Lis

Android ListView焦点事件冲突问题与解决

Android ListView对于单纯列表展示是很好用的,但是一旦牵扯到对listView进行操作就会遇到各种各样的问题.比如保存Checkbox状态与item复用的冲突.遇到可获取焦点的控件比如说button.edxttext等与listView本身的点击事件冲突等.对于后者,这里不研究原因,只提供解决方案. 如果listView之中只有button这样会抢夺焦点的控件,最好的建议是直接把button换成Textview,直接规避焦点问题. 如果有些产品经理要求在listview的item中

Android listview viewpager解决冲突 滑动

Android listview viewpager 滑动 跳动 冲突解决 ListView中嵌套ViewPage有或者滑动手势冲突解决 在listview 上使用 addHeaderView 在第一栏添加 viewpager 当做header 如: 当触发 滑动事件 的时候容易引起 滑动冲突    (比如斜着滑动viewpager  的时候 listview会跳动) 特别是在  下拉刷新或者上拉加载 的时候 , 组件可能会传递到viewpager当中 查阅了很多的帖子  发现修改起来都非常麻烦

ListView与ScrollView冲突的4种解决方案

问题解决方案1.手动设置ListView高度    经过测试发现,在xml中直接指定ListView的高度,是可以解决这个问题的,但是ListView中的数据是可变的,实际高度还需要实际测量.于是手动代码设置ListView高度的方法就诞生了. /** * 动态设置ListView的高度 * @param listView */ public static void setListViewHeightBasedOnChildren(ListView listView) { if(listView

冲突--ListView与ScrollView冲突的4种解决方案

众所周知ListView与ScrollView都具有滚动能力,对于这样的View控件,当ScrollView与ListView相互嵌套会成为一种问题: 问题一:ScrollView与ListView嵌套导致ListView显示不全面 问题二:ScrollView不能正常滑动 解决方式一: ScrollView+LinearLayout+ListView可以换成ScrollView+LinearLayout+LinearLayout,对于开发中,ScrollView所能滚动的样式形式各异,另外的话

ListView与ScrollView冲突的4种接近方案

众所周知ListView与ScrollView都具有滚动能力,对于这样的View控件,当ScrollView与ListView相互嵌套会成为一种问题: 问题一:ScrollView与ListView嵌套导致ListView显示不全面 问题二:ScrollView不能正常滑动 解决方式一: ScrollView+LinearLayout+ListView可以换成ScrollView+LinearLayout+LinearLayout,对于开发中,ScrollView所能滚动的样式形式各异,另外的话

android Listview 与 Scrollview 共存的一个较优良的解决方法

最近因为一个项目需要在Scrollview里面嵌套一个Listview,如果只是用android提供的ListView是什么效果大家肯定都已经知道了,经过摸索,自己找到了一个还算可以的解决方法,如下所示: 首先时自定义一个MyListview继承Listview ,重写他的onMeasure方法 ,让它不能滚动,代码如下: 基本这样就解决了它俩共存的问题,但是新问题来了,每次加载时,都是MyListview优先显示(而且好像是从MyListview底部向上开始显示的,因为我的测试数据太少,可能说