我一直在寻找创建风格不同的列表视图,就像许多其他人一样,我开始寻找扩展AbsListView。根据Android文档,AbsListView是:
可用于实现项目虚拟化列表的基类。列表在此处没有空间定义。例如,此类的子类可以在网格中,在轮播中,作为堆栈等显示列表的内容。
经过一些努力和审查ListView实现后,看起来可能无法像ListView那样扩展AbsListView,因为这两个类的耦合和无法访问某些包成员。我偶然发现了Romain Guy的这个表格:
AbsListView和AbsSpinner旨在扩展 框架。它们也可以在第三方应用程序中扩展,但我们做到了 不要故意暴露所有必要的受保护字段和方法。 我们要非常小心我们如何公开这样的API以便得不到 未来扩展和内部变化的东西。我们目前 建议你只需复制/粘贴你需要的代码 应用
我开始尝试这样做但是复制AbsListView变成了一堆复制其他东西的漏洞,它实际上似乎是一个失败的主张。我想看看是否有人成功扩展了可以分享方法的AbsListView。
[1] http://developer.android.com/reference/android/widget/AbsListView.html
[2] https://groups.google.com/forum/?fromgroups#!topic/android-developers/UhbR1tpVvF0
答案 0 :(得分:4)
该职位大约在2010年,但他的评估仍然适用于今天。某些必要的方法和字段受到保护,以防止将来因更改AbsListView的内部结构而导致的不兼容性。
最好的解决方案仍然是将AbsListView的代码复制到您的项目中,以及必要的依赖项(您提到的兔子洞)。
与此同时,如果您想描述您正在尝试构建的View类型,我们可能会指向一个比创建自己的AbsListView更容易的方向?
答案 1 :(得分:2)
我尝试将ListView
和AbsListView
子类化以开发2D可滚动电子表格时遇到了同样的经历。我最终得到了自己的ViewGroup
子类,它处理布局和TwoDScrollView
的子类来处理滚动。最难的部分是让flings正常工作(即在滚动到视图之前创建和放置新视图)并同步可滚动组件之间的视图位置。有了足够的时间,就可以创建一个强大的组件,从Cursor中提取数据并相当平滑快速地滚动它。