是否可以扩展AbsListView来创build新的ListView实现?
我一直在寻找创build一个风格不同的列表视图,像许多其他人一样,我开始寻找扩展AbsListView。 根据Android文档,AbsListView是:
可用于实现项目的虚拟化列表的基类。 列表在这里没有空间定义。 例如,这个类的子语句可以在网格中显示列表的内容,在旋转木马中显示为堆栈等。
经过对ListView实现的一些努力和评论后,看起来像ListView那样扩展AbsListView是不可能的,因为这两个类的耦合以及不能访问某些包成员。 我偶然发现了这个表格Romain Guy:
AbsListView和AbsSpinner被devise为在框架内扩展。 他们也可以扩展到第三方应用程序,但我们没有公开所有必要的保护领域和方法的目的。 我们想要非常小心的暴露这样的API,以便为未来的扩展和内部变化获取东西。 我们目前的build议是,只需在应用程序中复制/粘贴所需的代码。
我开始试图做到这一点,但复制AbsListView成为一堆其他东西复制的兔子洞,它真的只是一个失败的提议。 我想看看是否有人成功扩展了可以共享方法的AbsListView。
[1] http://developer.android.com/reference/android/widget/AbsListView.html
[2] https://groups.google.com/forum/?fromgroups#!topic/android-developers/UhbR1tpVvF0
有一个很好的教程索尼(虽然他们扩展AdapterView而不是AbsListView)在这里:
这个职位是大约在2010年,但他的评估今天仍然如此。 某些必要的方法和字段受到保护,以防止将来由于更改AbsListView的内部结构而导致的不兼容性。
最好的解决办法是将AbsListView的代码和必要的依赖项(你提到的兔子洞)一起复制到你的项目中。
同时,如果您想描述您正在尝试构build的视图types,我们可能会指向一个比创build自己的AbsListView稍微简单一些的方向。
我有相同的经验,尝试子类ListView
和AbsListView
来开发一个2D可滚动的电子表格。 我结束了我自己的ViewGroup
的子类,它处理布局和TwoDScrollView
的子类来处理滚动。 最难的部分是正在工作正常工作(即创build并放置新视图,然后滚动到视图中)和同步滚动组件之间的视图位置。 有了足够的时间,有可能创build一个强大的组件,从光标中提取数据,并相当平滑快速地进行滚动。