listview嵌套listview的替换解决方案(适用于个别情况)
来源:互联网 发布:js条件公式编辑器 编辑:程序博客网 时间:2024/05/17 08:38
按照android的listview机制,理论上不推荐listview'嵌套。这不,我就遇到了listview嵌套listview 的诸多问题。
问题:listview 数据显示不完全(只显示一行)
listview的机制就是item的布局或者内容相似或者相同(具体原理这里不多讲,主要是我理解的也不是很深),每次加载到即将到来的item时候去onMeasure,这时候涉及到优化的问题,最好的优化就是利用ViewHolder缓存机制,将相同的布局缓存下来,这样在onMeasure的时候,由于布局高度一样,就不用去计算(或者计算时间几乎忽略不计),从而不会形成这方面的页面滑动卡顿。当然,有图片加载,或item布局类型较多,或者有其他耗时操作的除外。
这里推荐一个类,listview嵌套listview的类,当然,这么做的话,页面显示时正常,但是最终的结果页面有点小卡,体验性能不好......
public class MyListView extends ListView {public MyListView(Context context) {super(context);}public MyListView(Context context, AttributeSet attrs) {super(context, attrs);}public MyListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);} @Override<pre name="code" class="java"> SpannableStringBuilder builder = new SpannableStringBuilder(); for (int i = 0; i < entities.get(position).getDrawInfos().size(); i++) { for (int j = 0; j < entities.get(position).getDrawInfos().get(i).getDrawResutSp().size(); j++) { builder .append(entities.get(position).getDrawInfos().get(i).getGameNo()) .append(entities.get(position).getDrawInfos().get(i).getDrawResutSp().get(j).getResult().getMessage()); String dl = String.valueOf(entities.get(position).getDrawInfos().get(i).getDrawResutSp().get(j).getSp()); int len = dl.length(); SpannableString SS = new SpannableString(dl); ForegroundColorSpan colSpan = new ForegroundColorSpan((context.getResources().getColor(R.color.sample_no))); SS.setSpan(colSpan, 0, len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); builder.append("(").append(SS).append(")"); if (!(i == entities.get(position).getDrawInfos().size()-1 && j == entities.get(position).getDrawInfos().get(i).getDrawResutSp().size() - 1)) { builder.append("\n"); } holder.oddTv.setText( builder); } }
protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); } @Overridepublic void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec);}}
我遇到的情况有点复杂,是三层listviw嵌套,即listview0嵌套(listview1嵌套(listview2))
嵌套两层都已经很是复杂痛疼,更何况是三层。
我的解决方案就是用一个textview去代替内层的两层嵌套的listview。这里,我用到了SpannableStringBuilder ,思路就是将两层嵌套的listview数据利用量程for循环遍历出来,在结合SpannableStringBuilder ,就做出了类似三层listview嵌套的效果
SpannableStringBuilder builder = new SpannableStringBuilder(); for (int i = 0; i < entities.get(position).getDrawInfos().size(); i++) { for (int j = 0; j < entities.get(position).getDrawInfos().get(i).getDrawResutSp().size(); j++) { builder .append(entities.get(position).getDrawInfos().get(i).getGameNo()) .append(entities.get(position).getDrawInfos().get(i).getDrawResutSp().get(j).getResult().getMessage()); String dl = String.valueOf(entities.get(position).getDrawInfos().get(i).getDrawResutSp().get(j).getSp()); int len = dl.length(); SpannableString SS = new SpannableString(dl); ForegroundColorSpan colSpan = new ForegroundColorSpan((context.getResources().getColor(R.color.sample_no))); SS.setSpan(colSpan, 0, len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); builder.append("(").append(SS).append(")"); if (!(i == entities.get(position).getDrawInfos().size()-1 && j == entities.get(position).getDrawInfos().get(i).getDrawResutSp().size() - 1)) { builder.append("\n"); } holder.oddTv.setText( builder); } }
当然,也肯定有高手能解决三层listview的嵌套,但是想要页面不卡顿真的很难呢,我是咩有做到,欢迎大神指点........就写到这里了,不是所有的listview嵌套情况都适用哦!!!
0 0
- listview嵌套listview的替换解决方案(适用于个别情况)
- ListView或者ScrollView嵌套listView的解决方案
- ScrollView嵌套ListView的解决方案
- ScrollView嵌套ListView的解决方案
- ScrollView嵌套ListView的解决方案
- scrollview嵌套listview的解决方案
- ScrollView嵌套ListView的解决方案
- ScrollView嵌套ListView的问题同样适用于gridview
- ScrollView 嵌套ListView 解决方案
- ScrollView嵌套ListView解决方案
- ListView嵌套GridView解决方案
- ScrollView嵌套ListView解决方案
- ScrollView嵌套ListView解决方案
- ScrollView嵌套listView解决方案
- ListView嵌套GridView,出现GridView显示不全情况解决方案
- ScrollView 嵌套 listView、gridView 冲突的解决方案
- ScrollView嵌套ListView冲突问题的解决方案
- ScrollView嵌套ListView问题的解决方案
- Host Health Tests
- PipeMapRed.waitOutputThreads(): subprocess failed with code N
- NGUI
- 高质量C编程02-数据类型
- uva 10566 Crossed ladders(二分 + 几何)
- listview嵌套listview的替换解决方案(适用于个别情况)
- Java 深拷贝&浅拷贝
- hive学习笔记二:安装
- Invalid command: files\mongoDB\log\log.txt
- UniversalImageLoader源码解读01-用来显示图片的ImageAware
- JAVA环境的JAVA_HOME, PATH 和CLASS_PATH设置
- IOS开发学习-篇外Swift2常用语法-3
- java迭代器和比较器
- WIFI ESP8266的SDK实现的云服务器升级程序