探讨:如何在ScrollView中嵌套ListView
如何 探讨 嵌套 listview ScrollView
2023-06-13 09:15:01 时间
因此这种情况下,不需要添加ScrollView。
如图所示:
(1)、ListView加载的数据不多,可以完全显示ListView的每一项,那么如果后面还有足够剩余的空间的话,布局B能正常显示;
(2)、ListView加载的数据加多,那么就会导致留给布局B的空间不足,或者根本就没有,布局B将会显示不完全或者完全不显示。
而不管怎么,ListView本身的内容,都可以通过滑动来查看。
例如设置android:layout_height="240dip",那么可以解决,可能会影响美观。
如图所示:
这种情况下,会出现问题。如图所示:
测试的时候发现,如果ListView加载的数据不多的话,确实可以解决,但是当ListView加载的数据较多的时候,仍旧无法显示完全,并且这个时候ListView自身也无法滚动了。
1、在计算listview总高度并设置
YourAdapteradapter=newMyAdapter("初始化你的适配器");
listView.setAdapter(adapter);
setListViewHeightBasedOnChildren(listView);(在setAdapter后调用自定义的方法)
/**
*@paramlistView
*/
privatevoidsetListViewHeightBasedOnChildren(ListViewlistView){
ListAdapterlistAdapter=listView.getAdapter();
if(listAdapter==null){
return;
}
inttotalHeight=0;
for(inti=0;i<listAdapter.getCount();i++){
ViewlistItem=listAdapter.getView(i,null,listView);
listItem.measure(0,0);
totalHeight+=listItem.getMeasuredHeight();
}
ViewGroup.LayoutParamsparams=listView.getLayoutParams();
params.height=totalHeight
+(listView.getDividerHeight()*(listAdapter.getCount()-1));
listView.setLayoutParams(params);
}
使用该方法需要注意:子ListView的每个Item必须是LinearLayout,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。
2、自定义ListView,重载onMeasure()方法,设置全部显示
packagecom.meiya.ui;
importandroid.widget.ListView;
/**
*
*@Description:scrollview中内嵌listview的简单实现
*
*@File:ScrollViewWithListView.java
*
*@Paceagecom.meiya.ui
*
*
*@Date下午03:02:38
*
*@Version
*/
publicclassScrollViewWithListViewextendsListView{
publicScrollViewWithListView(android.content.Contextcontext,
android.util.AttributeSetattrs){
super(context,attrs);
}
/**
*Integer.MAX_VALUE>>2,如果不设置,系统默认设置是显示两条
*/
publicvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
intexpandSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec,expandSpec);
}
}
以上可以解决scrollView内嵌listView,但是有一个问题是第一次进入界面时动态加载listview的items后页面会跳转到listview的第一个子项,这很蛋疼,
无奈又不知道怎么解决,就先用
scrollView.post(newRunnable(){
//让scrollview跳转到顶部,必须放在runnable()方法中
@Override
publicvoidrun(){
scrollView.scrollTo(0,0);
}
});
这个方法过度下,希望有知道的朋友还给点解决方案
3、使用scrollView+LinearLayout用addView()的方法添加列表。
相关文章
- GPDB如何使用valgrind进行内存检测
- Oracle 视图 DBA_LOGSTDBY_EDS_SUPPORTED 官方解释,作用,如何使用详细说明
- Oracle 参数 STANDBY_PDB_SOURCE_FILE_DBLINK 官方解释,作用,如何配置最优化建议
- 搞懂Oracle:查询所有用户的技巧(oracle如何查询用户)
- 如何在 CentOS 中添加、启用和禁用一个仓库
- 探讨 Linux 应用程序如何使用串口通信技术,串口通信在物联网设备通讯中发挥重要作用(linux应用串口)
- 如何确保MySQL密码的安全?——探讨MySQL密码保护措施(mysql密码安全)
- MySQL自增类型解析:如何设置自增字段和选择正确的数据类型?(mysql自增类型)
- Oracle如何进行汉字查询?(oracle查询汉字)
- 如何调用Oracle存储过程?(调用oracle存储过程)
- Oracle如何解决锁定引起的问题(oracle关于锁的问题)
- 性能探讨并发事务如何影响redis性能(并发事务会影响redis)
- 探讨MySQL如何实现一机多端口的使用方式(mysql 一机多端口)
- Oracle 中简单求和细说与有趣(oracle中如何求和)
- Ubuntu10下如何搭建MySQLProxy读写分离探讨
- MySQL5.6如何更改安全的处理密码探讨
- 探讨:Oracle数据库查看一个进程是如何执行相关的实际SQL语句
- 探讨如何把session存入数据库
- 探讨:如何使用PhpDocumentor生成文档
- 探讨如何在Eclipse中过滤版本控制文件.svn
- 探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行