Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否有ScrollView'的侦听器;什么是滚动?_Android - Fatal编程技术网

Android 是否有ScrollView'的侦听器;什么是滚动?

Android 是否有ScrollView'的侦听器;什么是滚动?,android,Android,我在ScrollView中有一个TableLayout,因为一些特殊的需要,我需要在ScrollView到达顶部时做一些事情。是否有这样一个侦听器来监听用户的滚动操作?或者,如果没有现成的监听器,我可以将ScrollView子类化(我认为这会很痛苦)以实现这一点吗?我需要什么方法来实施?到目前为止,我还没有找到解决办法,但我希望这只是因为我错过了一些东西 谢谢大家! (如果你想知道我为什么要这么做,这里有更多的背景: 我有一个平面文件数据库,我使用TableLayout显示查询结果。当查询生成数

我在ScrollView中有一个TableLayout,因为一些特殊的需要,我需要在ScrollView到达顶部时做一些事情。是否有这样一个侦听器来监听用户的滚动操作?或者,如果没有现成的监听器,我可以将ScrollView子类化(我认为这会很痛苦)以实现这一点吗?我需要什么方法来实施?到目前为止,我还没有找到解决办法,但我希望这只是因为我错过了一些东西

谢谢大家!

(如果你想知道我为什么要这么做,这里有更多的背景:


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

您可能需要研究扩展BaseAdapter并覆盖
getView(int-position,view-convertView,ViewGroup-parent)

用这种方法你可以检查位置。因此,如果你一开始就用10个项目填充你的列表,并且位置是10,那么你知道你已经到达了列表的底部,并且可以向列表中添加更多的项目。如果职位为0,则您知道您的职位在列表的顶部。ListView中还有一种方法可以让您的项目从底部开始(如messenger应用程序))。

您使用TableLayout而不是带有游标适配器的ListView,这是为了解决与查看大型数据集(滚动、重用视图元素,而不是一次查询所有数据)相关的问题吗?看起来你真的是在用这种方式让自己的生活变得艰难,而安卓系统可以为你做艰苦的工作。@Yoni好吧,问题是,我对安卓系统不熟悉。我见过游标这个词好几次,我认为它与系统提供的数据库有关(不管它叫什么名字,但Android似乎有某种内置DBMS),而不是任何专有数据库。谢谢你的提示,我会研究一下。值得注意的是,你可以使用任何你想要的专有数据库来编写你自己的适配器。我可以想象,数据的很多减速都与预生成3000个视图有关,而不是与实际的数据库查询有关,因此您也可以将数据加载到一个普通的
阵列适配器中。@Yoni是的,您是对的,时间浪费在生成视图上,而不是数据上(这是平面文件数据库的好处)。我想我必须放弃表格布局,转而使用ListView。不要把它看作是放弃,把它看作是简化你自己的生活,同时学习一些Android类,它们可以帮你完成一些繁重的工作:)那太好了。我刚刚检查了getView()方法,对这个方法没有任何解释。但从你的话来看,我想这个方法是在视图即将显示时调用的,对吗?但是ArrayAdapter是否可以适应于表?我是Android新手,我曾经用过一次带ArrayAdapter的ListView。但我似乎没有在TableLayout的文档中看到他们也可以使用ArrayAdapter@对不起,我忘记了您在scrollview中使用表布局的事实。如果我是你的话,我肯定会建议你从TableLayout改为ListView。原因是ListView是为了处理像您的请求一样的庞大数据集而构建的。getView()的功能是正确的。调用该函数时,可以返回一个视图,其中填充了给定位置/行所需的信息。如果不复杂,请尝试将TableLayout/ScrollView更改为ListView。感谢您的回复。是的,在您和Yoni几分钟后的回复后,我意识到TableLayout真的不是一个好的选择!我真的需要切换到ListView。所以,感谢你们两位,我现在正试图让“高效适配器”示例程序在我的程序中工作。唷!很高兴我没有在桌面布局的问题上继续争论,很高兴我问了。@wwyt我很高兴听到你要做出改变。您应该注意到性能的显著提升。祝你好运