2011-02-25 54 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