Code Monkey home page Code Monkey logo

smarttable's Introduction

SmartTable

 android自动生成表格框架

License

下载地址

QQ群

功能介绍
  1. 快速配置自动生成表格;
  2. 自动计算表格宽高;
  3. 表格列标题组合;
  4. 表格固定左序列、顶部序列、第一行、列标题、统计行;
  5. 自动统计,排序(自定义统计规则);
  6. 表格图文、序列号、列标题格式化;
  7. 表格各组成背景、文字、网格、padding等配置;
  8. 表格批注;
  9. 表格内容、列标题点击事件;
  10. 缩放模式和滚动模式;
  11. 注解模式;
  12. 内容多行显示;
  13. 分页模式;
  14. 首尾动态添加数据;
  15. 丰富的格式化;
  16. 支持二维数组展示(用于类似日程表,电影选票等);
  17. 导入excel(支持颜色,字体,背景,批注,对齐,图片等基本Excel属性);
  18. 表格合并单元(支持注解合并,支持自动合并);
  19. 支持其他刷新框架SmartRefreshLayout;
  20. 可配置表格最小宽度(小于该宽度自动适配);
  21. 支持直接List或数组字段转列;
  22. 支持Json数据直接转换成表格;
  23. 支持表格网格指定行列显示;
  24. 支持自动生成表单。
功能展示

基本功能

缩放功能

缩放

刷新功能(使用SmartRefreshLayout)

刷新

导入Excel(使用Jxl)

Excel Excel

导入二维数组

日程 头像

List或数组转列

课表表

表单功能

表单功能

如何使用
  • 引用

添加 JitPack repository 到你的build文件

allprojects {
		repositories {
			...
			maven { url 'https://www.jitpack.io' }
		}
	}

增加依赖

dependencies {
	        compile 'com.github.huangyanbin:SmartTable:2.2.0'
	}
 如果你不需要数组转列功能,你可以使用1.7.1版本,需要的话,请使用最新版本2.2.0
 2.0格式化配置有所变化,文档还没写,如果要需求,可以在QQ群询问。

使用表格View

 <com.bin.david.form.core.SmartTable
       android:id="@+id/table"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
      />
注解模式

在您需要生成的表格的类增加注解

@SmartTable(name="表名")

在你需要显示的字段增加注解

// id为该字段所在表格排序位置
 @SmartColumn(id =1,name = "列名")
 //如果需要查询到该成员变量里面去,通过设置type实现
 @SmartColumn(type = ColumnType.Child)

设置表格数据

  table = findViewById(R.id.table);
  table.setData(list);
注解模式就是这么简单,你可以直接运行查看效果了。当然这只是注解基本配置,注解里面还有自动统计,列组合等,如果你想要了解注解更多,请查看demo.
基本模式
    //普通列
   Column<String> column1 = new Column<>("姓名", "name");
   Column<Integer> column2 = new Column<>("年龄", "age");
   Column<Long> column3 = new Column<>("更新时间", "time");
   Column<String> column4 = new Column<>("头像", "portrait");
    //如果是多层,可以通过.来实现多级查询
   Column<String> column5 = new Column<>("班级", "class.className");
   //组合列
   Column totalColumn1 = new Column("组合列名",column1,column2);
   //表格数据 datas是需要填充的数据
   final TableData<User> tableData = new TableData<>("表格名",userList,totalColumn1,column3);
   //设置数据
   table = findViewById(R.id.table);
   //table.setZoom(true,3);是否缩放
   table.setTableData(tableData);
注解模式更多功能

@SmartTable表格注解,用于生成表格。

注解 作用
name 表格名
count 是否显示统计行
pageSize 页数量
currentPage 当前页

@SmartColumn列,用于注解列。

注解 作用
name 列标题
id 列排序位置(越小越在前面)
parent 父列名称(不设置则没有父列)
align 列对齐方式
type 设置是否查询下一级
autoMerge 设置是否自动合并
maxMergeCount 合并最大数量
autoCount 是否开启统计
fixed 是否固定该列

解释:

  • align

    设置该列对齐方式,默认居中
    
  • type

    有ColumnType.Own,ColumnType.Child,两个值可以设置,假设UserInfo 有个属性是Family family对象,你想解析faily对象的属性monther,father两个属性,则需要设置Child,并在monther,father下添加相对应的注解@SmartColumn,否则只解析到Family,默认是Own。
    
  • autoMerge

    假设你返回的数据格式化之后该列附近数据有相同,则会自动合并成一个单元格,默认不开启合并。
    
  • autoCount

     table 开启显示统计行,设置autoCount为true,则该列可以自动统计,默认为false。
    
  • fixed

     fixed设置为true,该列滚动到最左边时,可以自动固定住。
    
基本方法介绍

Column类常用方法

1. 是否自动排序 setAutoCount(boolean isAutoCount)
2. 是否反序排列 isReverseSort
3. 设置排序比较 setComparator
4. 统计格式化 setCountFormat
5. 列内容点击事件 OnColumnItemClickListener
6. 滑动到表格左边时固定列 setFixed
7.  设置列对齐 setTextAlign
8. 设置开启自动合并 setAutoMerge
9. 设置开启最大数量 setMaxMergeCount
10. 设置绘制样式格式化 setDrawFormat
11. 设置文字格式化 setFormat

TableData类常用方法

1. 设置排序列 setSortColumn
2. 设置列标题格式化 settitleDrawFormat
3. 设置顶部序列号格式化 setXSequenceFormat
4. 设置左边序列号格式化 setYSequenceFormat
5. 设置是否显示统计 setShowCount
6. 设置列标题绘制格式化 setTitleDrawFormat
7. 设置X序号行文字格式化 setXSequenceFormat
8. 设置Y序号列文字格式化 setYSequenceFormat
9. 设置添加自定义合并规则setUserCellRange(List<CellRange> userCellRange)

TableConfig类常用方法

 1.  设置内容文字样式  setContentStyle
 2.  设置左边序列文字样式 setYSequenceStyle
 3.  设置顶部序列文字样式 setXSequenceStyle
 4.  设置列标题文字样式 setColumnTitleStyle
 5.  设置表格标题文字样式 setTableTitleStyle
 6.  设置统计行样式  setCountStyle
 7.  设置列标题网格样式 setColumnTitleGridStyle
 8.  设置内容网格样式 setGridStyle
 9.  设置网格列padding setVerticalPadding
 10. 设置网格行padding setHorizontalPadding
 11. 设置左序列背景 setYSequenceBackgroundColor
 12. 设置横序行背景 setXSequenceBackgroundColor
 13. 设置列标题背景 setColumnTitleBackgroundColor
 14. 设置内容背景 setContentBackgroundColor
 15. 设置统计行背景 setCountBackgroundColor
 16. 固定左侧 setFixedYSequence
 17. 固定顶部  setFixedXSequence
 18. 固定列标题  setFixedTitle
 19. 固定第一列 setFixedFirstColumn//1.4版本取消了 可以使用Column.setFixed 固定任意列。
 20. 固定统计行  setFixedCountRow
 21. 列标题上下padding setColumnTitleVerticalPadding
 22. 增加列标题左右padding setColumnTitleHorizontalPadding
 22. 序列网格样式 setSequenceGridStyle
 23. 列标题网格样式 columnTitleGridStyle
 24. 设置是否显示顶部序号列 setShowXSequence
 35. 设置是否显示左侧序号列 setShowYSequence
 36. 设置是否显示表格标题 setShowTableTitle
 37. 设置是否显示列标题 isShowColumnTitle
 38. 设置表格最小宽度 setMinTableWidth

SmartTable类常用方法

1.  设置列标题点击事件   setOnColumnClickListener
2.  设置排序列 setSortColumn
3.  设置是否开启缩放 setZoom(boolean zoom,float maxZoom,float minZoom)
4.  添加新数据 addData(List<T> t, boolean isFoot)
5.  设置选中Cell样式 setSelectFormat
6.  重新计算布局 notifyDataChanged

Column构造方法中还有两个参数 IFormat<T>, IDrawFormat<T>。其中IFormat<T>是用于格式化显示文字,比如User对象中有更新时间字段time时间戳。我们想要显示不同格式,就可以重写该方法。IDrawFormat<T>是用于显示绘制格式化,比如User对象中有头像字段portrait时间戳,就可以使用该方法,框架提供几种IDrawFormat包括(文字、Bitmap、Resoure图片、图文结合)。

二维数组以及Excel

你只需要用ArrayTableData 代替TableData就可以。设置想要展示的二维数组和列标题。

  String[] week = {"日","一","二","三","四","五","六"};
        Integer[][] infos = {{0,1,2,1,1,0,1,1,0,1,1,2,3}, {4,2,1,1,0,1,1,0,1,1,2,2,3},
                {2,2,0,1,2,4,1,0,1,3,0,1,1},{2,1,1,0,1,4,0,1,1,2,2,0,3},
                {0,1,2,4,1,0,1,4,0,1,1,2,2}, {1,0,1,3,2,2,0,1,2,1,1,0,4},
                {3,1,2,4,0,1,2,1,1,0,1,1,0}};
  ArrayTableData<Integer> tableData = ArrayTableData.create("日程表",week,infos,new IDrawFormat<Integer>(){...});

请参考demo和好用漂亮的Android 表格框架2

数组或者List转列以及Json表格

请参考demo和好用漂亮的Android 表格框架3

关于混淆
keep解析数据的类以及SmartTable类。

总结

这次写了SmartTable,本来没想写那么多,结果越写越多。功能也很完善了,好多新的想法由于之前没有考虑到,无法进一步实现。但对基础的Excel支持我觉得已经很完美了,甚至可以展示Excel中图表(使用SmartChart)。如果你在android端需要使用表格,这个肯定可以满足你的需求,希望有需要的同学可以使用它。

打赏

 如果你觉得对你有帮助,客官打个赏!

打赏

License

SmartTable is released under the Apache 2.0 license.

Copyright 2017 Huangyanbin.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at following link.

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitat


smarttable's People

Contributors

huangyanbin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

smarttable's Issues

setAutoMerge(true)有的无效呢?

所有的列都设置了.setAutoMerge(true);。列的5、6两行合并了。同一列下面的8、9、10、11行也是相同的内容,为什么没有自动合并呢?好奇怪

疑问

请问是否支持 ViewPager+Fragment

setContentStyle会报空指针异常

代码如下:
mTermSmartTable.getConfig() .setColumnTitleStyle(new FontStyle(21, Color.BLACK)) .setContentStyle(new FontStyle(this, 18, Color.BLACK)) .setShowTableTitle(false) .setShowXSequence(false) .setShowYSequence(false) .setTextLeftOffset(5);

FATAL EXCEPTION: Thread-603
java.lang.NullPointerException
at com.bin.david.form.utils.DrawUtils.getTextHeight(DrawUtils.java:22)
at com.bin.david.form.core.TableMeasurer.getTableHeight(TableMeasurer.java:120)
at com.bin.david.form.core.TableMeasurer.measure(TableMeasurer.java:30)
at com.bin.david.form.core.SmartTable$1.run(SmartTable.java:233)
at java.lang.Thread.run(Thread.java:841)

after refresh data, the UI of table reduce a row

I need to change a column's data, when I call column.getDatas().set(position, true); and then call table.invalidate(); the UI of table reduce a row, why? Is it a exception? or I call error functions.

无网络情况下闪退问题

网络数据模式下,无网络或者网络请求失败的情况下,报这个错误java.lang.NullPointerException: Attempt to invoke virtual method 'void com.bin.david.form.data.table.TableData.clear()',给的demo中也有同样的问题!

表格数据多次更新后有一定几率会报错闪退

screenshot_2018-03-07-18-58-13-712_com miui bugre
screenshot_2018-03-07-19-03-29-188_com miui bugre

以上是两次错误报告

在多次频繁的更新表格内不同的数据后会出现这样的问题
使用的是普通的模式设置TableData,正常情况下数据都可以成功显示,切换数据次数多了就出错了

1.8.9,1.9.0都存在这个问题
望尽快修复

数组越界问题java.lang.ArrayIndexOutOfBoundsException: length=6; index=6

异常:
05-03 11:02:05.825 8429-8429/com.table.scrollablepanel E/AndroidRuntime: FATAL EXCEPTION: main Process: com.table.scrollablepanel, PID: 8429 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.table.scrollablepanel/com.table.scrollablepanel.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=6; index=6 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2534) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2608) at android.app.ActivityThread.access$800(ActivityThread.java:178) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5637) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754) Caused by: java.lang.ArrayIndexOutOfBoundsException: length=6; index=6 at com.bin.david.form.data.table.FormTableData.create(FormTableData.java:40) at com.table.scrollablepanel.MainActivity.onCreate(MainActivity.java:45) at android.app.Activity.performCreate(Activity.java:6092) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2481) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2608)  at android.app.ActivityThread.access$800(ActivityThread.java:178)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)  at android.os.Handler.dispatchMessage(Handler.java:111)  at android.os.Looper.loop(Looper.java:194)  at android.app.ActivityThread.main(ActivityThread.java:5637)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754) 
Activity代码:
Form[][] forms = { { new Form("序号", Paint.Align.CENTER), Form.Empty, new Form("盘点任务单", Paint.Align.CENTER), Form.Empty, new Form("任务名称", Paint.Align.CENTER), Form.Empty, new Form("资产类别", Paint.Align.CENTER), Form.Empty, new Form("是否包含租赁设备", Paint.Align.CENTER), Form.Empty, new Form("创建人", Paint.Align.CENTER) } }; //出现问题的代码: final FormTableData<Form> tableData = FormTableData.create(table, "登记表", 6, forms);

单个格子背景问题

你好,我想获取某一列数据的最大值最小值并为其设置其背景颜色,要是最大最小值都只有一个还可以,但是一旦同时有很多最大值的时候就不好做了,设置颜色部分如下
table.getConfig().setContentBackgroundFormat(new BaseCellBackgroundFormat() {
@OverRide
public int getBackGroundColor(CellInfo cellInfo) {
if ("voltage".equals(cellInfo.column.getFieldName()) && ((cellInfo.position == maxV))) {
return ContextCompat.getColor(MainActivity.this, R.color.selectColor);
} else if ("voltage".equals(cellInfo.column.getFieldName())&& ((cellInfo.position == minV))) {
return ContextCompat.getColor(MainActivity.this, R.color.column_bg);
} else {
return TableConfig.INVALID_COLOR;
}
}
});

小问题

当放大之后,固定列的setFixedYSequence方法不生效了,而且无法滑动到最顶部和最左边了

导入excel

  1. 导入excel(支持颜色,字体,背景,批注,对齐,图片等基本Excel属性)
    这个功能在哪,没找到呀

请问支持上拉加载吗?

看到有分页,但是似乎没有上拉加载,
还有字体除了大小颜色,还能设置其他属性吗?比如textStyle

最后赞叹一下,非常强大的控件。

数据上下拉加载

smartTable在交互上体验还是很棒的,也属于列表类型的控件,若有需求在数据很多的情况下,就得考虑分页加载的问题,建议大神可以扩展集成下分页加载 @huangyanbin

一个小问题

在竖向滑动表格的时候能不能禁止 表格的横向滑动,在横向滑动的时候禁止表格的竖向滑动。这样在滑动的时候表格就不会抖动了。算是一个小优化QAQ

一点小建议

非常感谢作者将这个库开源出来,功能十分强大,只是在横向滑动表格时会 触发 上下滑动,这个体验可以改进一下就更好了。

老铁

请问如何设置默认的上拉加载,下拉刷新样式,或者你提供了几种样式?求指教

List解析成多个Column

刚看到增加了List的解析,但是是解析到一个Column里面的。很多使用场景是需要将一个List解析成多个Column进行展示,希望添加,非常感谢。

内容换行

您好,我需求是在内容里面,固定宽度,然后内容会自动换行,今天改了点代码,但是文字并不居中,不知道需要有哪些类需要改动?

dialogfragment 中使用异常

## dialog dismiss的时候报错

05-16 19:54:36.185 21577-21577/? W/System.err: java.lang.ClassCastException: android.view.ContextThemeWrapper cannot be cast to android.app.Activity
05-16 19:54:36.185 21577-21577/? W/System.err: at com.bin.david.form.core.SmartTable.onDetachedFromWindow(SmartTable.java:591)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.View.dispatchDetachedFromWindow(View.java:13690)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2834)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2834)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2834)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2834)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2834)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewRootImpl.dispatchDetachedFromWindow(ViewRootImpl.java:3192)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewRootImpl.doDie(ViewRootImpl.java:5776)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.ViewRootImpl.die(ViewRootImpl.java:5753)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.WindowManagerGlobal.removeViewLocked(WindowManagerGlobal.java:439)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:394)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:125)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.app.Dialog.dismissDialog(Dialog.java:341)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.app.Dialog.dismiss(Dialog.java:324)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.app.DialogFragment.dismissInternal(DialogFragment.java:278)
05-16 19:54:36.185 21577-21577/? W/System.err: at android.app.DialogFragment.dismiss(DialogFragment.java:258)

怎么单独设置Column的背景

需求是根据值设置cell的背景,值不为空的cell将其背景设置为红色。代码如下,得到的结果是所有cell都变红色了,并且覆盖了文本值。
`column4.setDrawFormat(new TextDrawFormat() {

        @Override
        public void drawBackground(Canvas c, CellInfo<String> cellInfo, Rect rect, TableConfig config) {
            if (!TextUtils.isEmpty(cellInfo.value)) {
                c.drawColor(Color.RED);
            }
        }
    });`

发现一个小bug

使用Form类中的静态变量Empty做多个占位的时候,改变一个占位的name,其他占位也会跟着变,所以这个变量应该去掉。

table没有设置listener,用手指快速点击table有几率发生以下错误,应该是多点触控没有捕获异常吧,

控件初始化:
`

private void initWidget()
{
ICellBackgroundFormat backgroundFormat = new BaseCellBackgroundFormat()
{
@OverRide
public int getBackGroundColor(CellInfo cellInfo)
{
if (cellInfo.row % 2 == 0)
{
return ContextCompat.getColor(mActivity, R.color.windows_bg);
}
return TableConfig.INVALID_COLOR;
}
};
tb_table.setZoom(false, 3, 0.2f); // 大小
tb_table.getConfig().setShowColumnTitle(true)
.setShowXSequence(false).setShowYSequence(false)
.setColumnTitleBackground(new BaseBackgroundFormat(getResources().getColor(R.color.windows_bg)))
.setCountBackground(new BaseBackgroundFormat(getResources().getColor(R.color.colorAccent))) // 总计背景
.setCountBgCellFormat(new ICellBackgroundFormat() // 总结字体颜色
{
@OverRide
public void drawBackground(Canvas canvas, Rect rect, Column column, Paint paint)
{
}

                @Override
                public int getTextColor(Column column)
                {
                    return ContextCompat.getColor(mActivity, R.color.white);
                }
            })
            .setFixedCountRow(true) // 固定统计行
            .setFixedXSequence(true) // 固定顶部
            .setFixedTitle(true) // 固定列标题
            .setContentCellBackgroundFormat(backgroundFormat) // 背景
            .setShowTableTitle(true) // 表名
            .setTableTitleStyle(new FontStyle(mActivity, 20, getResources().getColor(R.color.colorPrimary)).setAlign(Paint.Align.CENTER));
}

`

快速点击后报错:
java.lang.IllegalArgumentException: pointerIndex out of range
at android.view.MotionEvent.nativeGetAxisValue(Native Method)
at android.view.MotionEvent.getX(MotionEvent.java:2381)
at android.support.v4.view.ViewPager.onInterceptTouchEvent(ViewPager.java:2092)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2402)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:559)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1870)
at android.app.Activity.dispatchTouchEvent(Activity.java:3236)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:71)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:71)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:521)
at android.view.View.dispatchPointerEvent(View.java:10952)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5121)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4973)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4504)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4557)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4523)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4656)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4531)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4713)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4504)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4557)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4523)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4531)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4504)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7011)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6940)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6901)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7121)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

ArrayTableData.create() BUG反馈

/**
 * 创建二维数组表格数据
 * 如果数据不是数组[row][col],可以使用transformColumnArray方法转换
 * @param tableName 表名
 * @param titleNames 列名
 * @param data 数据 数组[row][col]
 * @param drawFormat 数据格式化
 * @return 创建的二维数组表格数据
 */
public static<T> ArrayTableData<T> create(String tableName,String[] titleNames, T[][] data, IDrawFormat<T> drawFormat){
    List<Column<T>> columns = new ArrayList<>();
    for(int i = 0;i <data.length;i++){
        T[] dataArray = data[i];
        Column<T> column = new Column<>(titleNames == null?"":titleNames[i], null,drawFormat);
        column.setDatas(Arrays.asList(dataArray));
        columns.add(column);
    }
    ArrayList<T> arrayList = new ArrayList<>(Arrays.asList(data[0]));
    ArrayTableData<T> tableData =  new ArrayTableData<>(tableName,arrayList,columns);
    tableData.setData(data);
    return tableData;
}

注释写传入的参数二维数组为[row][col],在方法体里的处理却是按照数组[col][row]进行处理。

若二维数组data[m][n],理解为一个m行,n列的二维数组,则data.length等于m,data[i].length等于n,data[i]为i行的一维数组数据,即i行的所有列数据。

    for(int i = 0;i <data.length;i++){
        T[] dataArray = data[i];
        Column<T> column = new Column<>(titleNames == null?"":titleNames[i], null,drawFormat);
        column.setDatas(Arrays.asList(dataArray));
        columns.add(column);
    }

循环体里按行取数据,然后在表格里作为一列的数据使用,这就对数据做了行列交换处理。

1.8.3版本下载不下来

你好,更新版本到1.8.3发现gradle没有下载成功。
缓存中的smarttable-1.8.3.aar文件为1kb,并且没有下载到对应的pom文件。
使用旧版本号(比如1.6.3)就是正常的。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.