zoukankan      html  css  js  c++  java
  • 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;
    	}
    }
    


  • 相关阅读:
    随感
    to Live On
    记Weblogic部署BUG(websocket)
    CentOS更换yum源配置
    Java-14常用类-03=String类详解
    大牛博客推荐
    java-14常用类-02=Java中的String类
    npm-02 修改NPM下载地址(转换地址与下载源)
    selenium-10 selenium原理+ide录制+文件上传+弹框处理
    测试基础介绍
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6917953.html
Copyright © 2011-2022 走看看