Android ListView实现Table行列效果
先来看运行效果:
就两个类,放上去运行就可以看到效果。
TableView.java
我把整个功能写成了一个类,在需要用的时候只需要new出这个类就可以直接使用了
该类目前的所有方法:/** 初始化带标题ListView. */CListView(Context, String[], List<String[]>)/** 整体有改变时,刷新显示. */definedSetChanged()/** 设置选中时的监听器. */setOnItemClickListener(OnItemClickListener)/** 设置行背景颜色, 多个颜色可以作为间隔色. */setItemBackgroundColor(int...)/** 数据总数. */getCount()/** 当前选中数据. */getItem(int)/** 设置当前选中位置. */setSelectedPosition(int)/** 当前选中位置. */getSelectedPosition()/** 设置被选中时的背景色. */setSelectedBackgroundColor(int)/** 设置标题背景色. */setTitleBackgroundColor(int)/** 设置标题文字颜色. */setTitleTextColor(int)/** 设置内容文字颜色. */setContentTextColor(int)/** 设置标题字体大小. */setTitleTextSize(float)/** 设置内容字体大小. */setContentTextSize(float)/** 设定哪列自动列宽 从0开始计算. */setAutoColumnWidth(int)1 楼 edwar12345 2011-12-07 要点总结一下,以利后人:
主要思想:
1,咋一看还以为用了TableLayout,其实完全没有利用。
纯ListView,TextView,LinearLayout
2,获取所有数据里面长度最长的做为宽度。如果一次倒导入100个-1万个数据,就要循环1万次。因为宽度最终由最大的一个定义,故而也实现了类似table的等距
3,利用Paint,给TextView画边框--->也实现了类似table的效果。。为什么不用Shape呢,里面的stoke专门画边框的。。
优点:
摒弃了传统的教条思想-为了实现table就必须用table。善于发现创新
缺点:
1,从构造器看,只有一个单一的代码构造器,缺陷比较大,因为只能从代码实现,无法跟其它组件整合。。缺少从xml膨胀的构造器。
2,从上面第二点,可以看出,循环那么多次,才能得出最终的宽度。。想想1个例循环1万次,10个列就是10万次。。大量时间浪费了。。
3,AdatperView 设计的比较死,getView里也套了一个循环,以模拟实际中的一条条添加。但不支持动态增加。。对于那种超市购物,一个个增加的那种,必须修改。
总之, 如果代码可以经过再改进,解决耗时太长这个问题,则不失为好方法。。
2 楼 edwar12345 2011-12-07 大哥,对不起,我犯错误了,知错必改。
错在:
我之前写的Listview都是一行一个数据。。对多个数据里会发生什么事情经验不足。
我本以为从XML里获取界面,然后利用ViewHolder会不会让getView少执行。。
因为你的方法,如果14行数据,getview起码执行88次。我还以为viewHolder会起点作用,结果用google原始方法,getView竟然执行了几百次,晕死。。
你的方法,如果2行数据,getView会执行8次。。我以为google的原始viewholder这种被誉为列表优化的方法能给点力,结果 2行数据,竟然执行了 18次。。
现在,我才知道自己经验缺乏。。一行5个数据,会造成getview多次执行的。。因为要不停地更新界面,以调整大小。。
以上我的所言都是缺乏经验,没有实践不知难。。 看来,耗时是难以避免的。。所以,才有 google, baidu 一次 才显示 20个 , 必须滚动到最下面,触发显示下一批的现象。。
学习了。。