安卓开发ScrollView嵌套ListView只显示一行

简介: 在用列表控件做一个“更多功能”的界面的时候 1 2 7 8 12 13 17 18 23 27 28 33 37 38 39 原本用ScrollView嵌套...

在用列表控件做一个“更多功能”的界面的时候

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
 3 android:id="@+id/ScrollView"
 4  android:layout_width="fill_parent" 
 5 android:layout_height="wrap_content" 
 6 android:scrollbars="vertical"> 
 7 
 8 <LinearLayout
 9     android:layout_width="match_parent"
10     android:layout_height="fill_parent"
11     android:orientation="vertical" >
12 
13     <ListView
14         android:id="@+id/list_more_top"       
15         android:layout_width="match_parent"
16         android:layout_height="fill_parent" >
17     </ListView>
18     <ImageView
19         android:id="@+id/imageView1"
20         android:layout_width="fill_parent"
21         android:layout_height="wrap_content"
22         android:src="@drawable/divider" />
23     <ListView
24         android:id="@+id/list_more_center"       
25         android:layout_width="match_parent"
26         android:layout_height="wrap_content" >
27     </ListView>
28     <ImageView
29         android:id="@+id/imageView2"
30         android:layout_width="fill_parent"
31         android:layout_height="wrap_content"
32         android:src="@drawable/divider" />
33     <ListView
34         android:id="@+id/list_more_buttom"       
35         android:layout_width="match_parent"
36         android:layout_height="wrap_content" >
37     </ListView>
38 </LinearLayout>
39 </ScrollView>

原本用ScrollView嵌套ListView   但是在测试的时候 ListView列表只显示一列! 这不是我希望得到的

我希望的是可以整个拖动三个列表

于是上网查询  发现的问题所在

在ScrollView中嵌套ListView空间,无法正确的计算ListView的大小,导致只显示列表第一项

故可以通过代码,根据当前的ListView的列表项计算列表的尺寸。

  1 package songsong;
  2 
  3 import com.example.xqx_tea.R;
  4 
  5 import android.app.Activity;
  6 import android.app.AlertDialog;
  7 import android.app.Notification.Builder;
  8 import android.content.DialogInterface;
  9 import android.content.Intent;
 10 import android.os.Bundle;
 11 import android.app.AlertDialog;
 12 import android.view.View;
 13 import android.view.ViewGroup;
 14 import android.view.Window;
 15 import android.widget.AdapterView;
 16 import android.widget.AdapterView.OnItemClickListener;
 17 import android.widget.ArrayAdapter;
 18 import android.widget.ListAdapter;
 19 import android.widget.ListView;
 20 
 21 public class MenuMore extends Activity{
 22     ListView list_more_top;
 23     ListView list_more_center;
 24     ListView list_more_buttom;
 25     
 26     @Override
 27     protected void onCreate(Bundle savedInstanceState) {
 28         // TODO Auto-generated method stub
 29         super.onCreate(savedInstanceState);
 30         requestWindowFeature(Window.FEATURE_NO_TITLE);
 31     setContentView(R.layout.menu_more);
 32 
 33     ListView list_more_top = (ListView) findViewById(R.id.list_more_top);
 34     ListView list_more_center = (ListView) findViewById(R.id.list_more_center);
 35     ListView list_more_buttom = (ListView) findViewById(R.id.list_more_buttom);
 36     String[] adapterData_top = new String[] { "饮茶时刻表", "小茶叶大妙用","中国十大名茶"};
 37     list_more_top.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,adapterData_top));
 38     
 39     String[] adapterData_center = new String[] { "使用帮助", "意见反馈","软件介绍"};
 40     list_more_center.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,adapterData_center));   
 41     
 42     String[] adapterData_buttom = new String[] { "检查更新", "退出软件"};
 43     list_more_buttom.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,adapterData_buttom));   
 44 
 45     setListViewHeightBasedOnChildren(list_more_top); 
 46     setListViewHeightBasedOnChildren(list_more_center);
 47     setListViewHeightBasedOnChildren(list_more_buttom);
 48 
 49     
 50     
 51     //为列表视图中选中的项添加响应事件
 52     list_more_top.setOnItemClickListener(new OnItemClickListener() {
 53 
 54         @Override
 55         public void onItemClick(AdapterView<?> parent, View arg1, int pos,
 56                 long id) {
 57             // TODO Auto-generated method stub
 58             
 59         }
 60     });
 61     
 62   //为列表视图中选中的项添加响应事件
 63     list_more_center.setOnItemClickListener(new OnItemClickListener() {
 64 
 65         @Override
 66         public void onItemClick(AdapterView<?> parent, View arg1, int pos,
 67                 long id) {
 68             // TODO Auto-generated method stub
 69             
 70         }
 71     });
 72     
 73   //为列表视图中选中的项添加响应事件
 74     list_more_buttom.setOnItemClickListener(new OnItemClickListener() {
 75 
 76         @Override
 77         public void onItemClick(AdapterView<?> parent, View arg1, int pos,
 78                 long id) {
 79             
 80             // TODO Auto-generated method stub
 81             if(1 == id)
 82                 {
 83                     finish();
 84                 }
 85             if(0 == id)
 86                 {
 87                 Intent intent = new Intent();
 88                 intent.setClass(MenuMore.this, More_submitdeal.class);
 89                 startActivity(intent);
 90                 }
 91             
 92         }
 93     });
 94     }
 95     
 96     public void setListViewHeightBasedOnChildren(ListView listView) {   
 97                 // 获取ListView对应的Adapter   
 98                 ListAdapter listAdapter = listView.getAdapter();   
 99                 if (listAdapter == null) {   
100                     return;   
101                 }   
102            
103                 int totalHeight = 0;   
104                 for (int i = 0, len = listAdapter.getCount(); i < len; i++) {   
105                     // listAdapter.getCount()返回数据项的数目   
106                     View listItem = listAdapter.getView(i, null, listView);   
107                     // 计算子项View 的宽高   
108                     listItem.measure(0, 0);    
109                     // 统计所有子项的总高度   
110                     totalHeight += listItem.getMeasuredHeight();    
111                 }   
112           
113                ViewGroup.LayoutParams params = listView.getLayoutParams();   
114                 params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));   
115                 // listView.getDividerHeight()获取子项间分隔符占用的高度   
116                 // params.height最后得到整个ListView完整显示需要的高度   
117                 listView.setLayoutParams(params);   
118             }   
119 
120 
121 }

 

 给三个列表分别求出ListView完全显示需要的高度 便可以整体上下滑动三个列表了

 

相关文章
|
14天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
40 19
|
15天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
41 14
|
16天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
在数字时代,掌握安卓应用开发技能是进入IT行业的关键。本文将引导读者从零基础开始,逐步深入安卓开发的世界,通过实际案例和代码示例,展示如何构建自己的第一个安卓应用。我们将探讨基本概念、开发工具设置、用户界面设计、数据处理以及发布应用的全过程。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你提供宝贵的知识和技能,帮助你在安卓开发的道路上迈出坚实的步伐。
29 5
|
14天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
16天前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
15天前
|
搜索推荐 前端开发 测试技术
打造个性化安卓应用:从设计到开发的全面指南
在这个数字时代,拥有一个定制的移动应用不仅是一种趋势,更是个人或企业品牌的重要延伸。本文将引导你通过一系列简单易懂的步骤,从构思你的应用理念开始,直至实现一个功能齐全的安卓应用。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你提供必要的工具和知识,帮助你将创意转化为现实。
|
15天前
|
Java Android开发 开发者
探索安卓开发:构建你的第一个“Hello World”应用
在安卓开发的浩瀚海洋中,每个新手都渴望扬帆起航。本文将作为你的指南针,引领你通过创建一个简单的“Hello World”应用,迈出安卓开发的第一步。我们将一起搭建开发环境、了解基本概念,并编写第一行代码。就像印度圣雄甘地所说:“你必须成为你希望在世界上看到的改变。”让我们一起开始这段旅程,成为我们想要见到的开发者吧!
24 0
|
7月前
|
存储 Java 开发工具
Android开发的技术与开发流程
Android开发的技术与开发流程
406 1
|
4月前
|
安全 Android开发 Swift
安卓与iOS开发:平台差异与技术选择
【8月更文挑战第26天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各占一方。本文旨在探索这两个系统在开发过程中的不同之处,并分析开发者如何根据项目需求选择合适的技术栈。通过深入浅出的对比,我们将揭示各自平台的优势与挑战,帮助开发者做出更明智的决策。
78 5
|
4月前
|
移动开发 搜索推荐 Android开发
安卓与iOS开发:一场跨平台的技术角逐
在移动开发的广阔舞台上,两大主角——安卓和iOS,持续上演着激烈的技术角逐。本文将深入浅出地探讨这两个平台的开发环境、工具和未来趋势,旨在为开发者揭示跨平台开发的秘密,同时激发读者对技术进步的思考和对未来的期待。