Android笔记: 解决ScrollView嵌套ListView的冲突方法

简介:

范例:

1.MainActivity代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
public  class  MainActivity  extends  Activity
{
                  
//   只要在设置ListView的Adapter后调用此静态方法Utility.setListViewHeightBasedOnChildren(listview);
//    即可让ListView正确的显示在其父ListView的ListItem中。
//    但是要注意的是,子ListView的每个Item必须是LinearLayout,不能是其他的,因为其他的Layout(如RelativeLayout)
//    没有重写onMeasure(),所以会在onMeasure()时抛出异常。
                  
     private  ArrayList<String> dataList;
     private  ListView listview;
     private  ImageView img;
     @Override
     protected  void  onCreate(Bundle savedInstanceState)
     {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
                      
         dataList =  new  ArrayList<String>();
         for  ( int  i =  0 ; i <  5 ; i++)
         {
             String str =  "第"  + i +  "行" ;
             dataList.add(str);
         }
                      
         img = (ImageView) findViewById(R.id.imageView1);
         listview = (ListView) findViewById(R.id.listView1);
                      
                      
         listview.setAdapter( new  BaseAdapter()
         {
                          
             @Override
             public  View getView( int  position, View convertView, ViewGroup parent)
             {
                 LayoutInflater inflater = getLayoutInflater();
                 View layout = inflater.inflate(R.layout.item,  null );
                 TextView tv = (TextView) layout.findViewById(R.id.tv_item);
                              
                              
                 String str = dataList.get(position);
                 tv.setText(str);
                              
                 return  layout;
             }
                          
             @Override
             public  long  getItemId( int  position)
             {
                 return  0 ;
             }
                          
             @Override
             public  Object getItem( int  position)
             {
                 return  null ;
             }
                          
             @Override
             public  int  getCount()
             {
                 return  dataList.size();
             }
         });
                      
         Utility.setListViewHeightBasedOnChildren(listview);
     }
}



2.Utility代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public  class  Utility
{
     public  static  void  setListViewHeightBasedOnChildren(ListView listView)
     {
         ListAdapter listAdapter = listView.getAdapter();
         if  (listAdapter ==  null )
         {
             // pre-condition
             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 ));
         listView.setLayoutParams(params);
     }
}




本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1290605,如需转载请自行联系原作者

目录
相关文章
|
4月前
|
Android开发 开发者
Android自定义view之利用drawArc方法实现动态效果
本文介绍了如何通过Android自定义View实现动态效果,重点使用`drawArc`方法完成圆弧动画。首先通过`onSizeChanged`进行测量,初始化画笔属性,设置圆弧相关参数。核心思路是不断改变圆弧扫过角度`sweepAngle`,并调用`invalidate()`刷新View以实现动态旋转效果。最后附上完整代码与效果图,帮助开发者快速理解并实践这一动画实现方式。
139 0
|
2月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
170 11
|
11月前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
386 15
Android 系统缓存扫描与清理方法分析
|
11月前
|
Web App开发 安全 程序员
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
多年的互联网寒冬在今年尤为凛冽,坚守安卓开发愈发不易。面对是否转行或学习新技术的迷茫,安卓程序员可从三个方向进阶:1)钻研谷歌新技术,如Kotlin、Flutter、Jetpack等;2)拓展新功能应用,掌握Socket、OpenGL、WebRTC等专业领域技能;3)结合其他行业,如汽车、游戏、安全等,拓宽职业道路。这三个方向各有学习难度和保饭碗指数,助你在安卓开发领域持续成长。
194 1
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
|
11月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
372 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
ARouter 测试技术 API
Android经典面试题之组件化原理、优缺点、实现方法?
本文介绍了组件化在Android开发中的应用,详细阐述了其原理、优缺点及实现方式,包括模块化、接口编程、依赖注入、路由机制等内容,并提供了具体代码示例。
234 2
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
1966 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
Android开发 Windows
如何解决 Android Studio 三方库依赖冲突问题
今天我们不继续说面试,讲点其他的,有一些废话,关注标题的请直接拉到下面。 近期呀,笔者除了整理 面试系列,其实还在做一件事,就是在费心费力地准备把 AiYaGirl 进行重构。
1871 0
|
9天前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
149 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
19天前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
78 6

热门文章

最新文章