2011-02-25 101 views
2

我在ScrollView中有一个TableLayout,由于一些特殊的需要,当ScrollView到达顶端时,我需要做一些事情。有听众倾听用户的滚动操作吗?或者,如果没有准备好的监听器,我可以继承ScrollView(这会让我很痛苦)来实现吗?我需要什么方法来暗示?到目前为止,我没有看到这个解决方案,但我希望这只是因为我错过了一些东西.....有没有ScrollView滚动的监听器?

谢谢!

(如果你想知道为什么我想这样做,这里是一些背景:

我有一个平面文件数据库,我用一个TableLayout显示查询结果当查询产生。数千行,填充表格所花费的时间(使用TableLayout.addView()添加行)变得不可接受 - 在模拟器上只有一分钟!而且,特别需要当表格显示时,它必须是放在最后一页,也就是说,我必须先填充最后几行,然后向上增长,而在表格增长时显示保持不变,我尝试了两种方法,但都没有令人满意,所以我不得不降级需求有点---我不一次填充所有3000行,而是只填充最后几页,像过去的40行左右。这样,用户将立即看到显示的结果。然后,如果当他决定向上滚动,当程序看到它,然后填充更多页面等。因此,我需要一个侦听器或某种方式来检测表或滚动视图何时到达顶部。感谢您阅读到目前为止!)

+0

是否有你使用TableLayout而不是带有CursorAdapter的ListView的原因,CursorAdapter负责处理有关查看大量数据集的问题(滚动,重用视图元素,不一次查询所有数据)?看起来你真的只是用这种方式让自己难过,因为Android可以为你做很多事情。 – 2011-02-25 19:07:31

+0

@Yoni嗯,事情是,我是Android新手。我几次看到Cursor这个词,我认为它与系统提供的数据库(不管它叫什么名字,但是似乎都有某种内置DBMS)绑定,而不是任何专有数据库。感谢提示,我会研究它。 – wwyt 2011-02-25 19:14:17

+0

值得注意的是,您可以使用您想要的任何专有数据库编写自己的适配器。我可以想象,数据的减速与预先生成3,000个视图有关,而不是实际的数据库查询,所以您也许能够将数据加载到普通的'ArrayAdapter'中。 – 2011-02-25 19:18:14

回答

1

您可能想要考虑扩展BaseAdapter http://developer.android.com/reference/android/widget/ArrayAdapter.html并覆盖getView(int position, View convertView, ViewGroup parent)。 在该方法中,您可以检查位置。因此,如果您从10个项目填充列表开始,并且位置为10,那么您知道自己已经到达列表底部,并且可以向列表中添加更多项目。如果位置为0,则知道列表顶部的位置。ListView中还有一个方法,让您的项目从底部开始(如Messenger应用程序)http://developer.android.com/reference/android/widget/AbsListView.html#setStackFromBottom(boolean)。

+0

Thatnks。我只是检查了getView()方法,根本没有关于thie方法的解释。但是从你的话来说,我认为这种方法是在视图即将显示时调用的,对吗?但是,ArrayAdapter可以适应表格吗?我是Android新手,我曾经使用ListView和ArrayAdapter。但我似乎没有在TableLayout的文档中看到他们也可以使用ArrayAdapter。 ?? – wwyt 2011-02-25 19:18:48

+0

@wwyt对不起,你在滚动视图中使用表格布局的事实让我失望了。如果我是你,我肯定会推荐从TableLayout更改为ListView。原因是ListView的建立是为了处理像请求这样的庞大数据集。你对getView()的做法是正确的。当这称为你可以返回一个视图充满了你想要的信息在它给定的位置/行。如果它不复杂,请尝试将TableLayout/ScrollView更改为ListView。 – Pzanno 2011-02-25 19:32:44

+0

感谢您的回复。是的,在您和Yoni的答复(仅仅几分钟之后)之后,我意识到TableLayout并不是一个好选择!我真的需要切换到ListView。所以,感谢你们两位,我现在试着让我的“Efficient Adapter”示例程序能够运行。呼!很高兴我没有对TableLayout的想法继续争斗,很高兴我问。 – wwyt 2011-02-25 19:47:58