2014-02-11 40 views
1

我創建了一個可滾動的自定義ViewGroup,其中有幾個> 200個EditTexts(並非所有人都同時顯示 - 我正在使用回收站)。我遇到的問題是滾動非常緩慢。Android:爲什麼EditText讓滾動變慢?

有趣的是,我沒有問題,如果我執行下列
1中的一個)禁用EDITTEXT [editText.setEnabled(假)]

2)如果我改變從EditText到TextView的視圖

關於這個問題可能有什麼想法?

+0

作爲一個良好的做法,你不能這樣做。 與ListView一樣,您必須僅保留那些正在顯示給用戶的視圖以及不再顯示在屏幕顯示區域的視圖。 –

+0

200 EditTexts?爲了什麼? – Geros

+0

我不認爲EditText是用這種用例來設計的......你的用例是什麼? –

回答

2

EditText是huge。請特別注意它繼承的所有方法。

爲什麼不嘗試使用一個帶有199個自定義TextView的EditText或在Canvas中繪製的大型矩形網格?您可以隨時自定義您的TextViews(或您繪製的矩形網格),使它們看起來像編輯框,但僅爲具有焦點本身的單元格使用一個EditText。

即使Excel如何工作某些它的功能。它可以直接編輯單元格(是),但它也在Excel電子表格的左上方有一個靜態單元格,用於向您顯示公式的內容(可能已將其作爲已聚焦單元格內的視圖呈現)。你可以自己做一些類似的事情。你可以擴展一個EditText來完成所有困難的工作,比如自動完成等等,但是你可以在具有焦點的矩形內繪製文本(或者將它插入具有焦點的特定TextView中)。

看看這個例子: https://github.com/dennis-sheil/android-spreadsheet

他似乎大多采用TextViews(雖然TextViews是太沉重,我開始認爲,畫布可這樣的事情是更好的,那一切都可以用繪圖方法來模擬,我的意思是閃爍的光標,單元格的突出顯示,字符輸入等等)。至少使用Canvas,你可以很容易地告訴它哪些部分需要繪製,哪些部分不在屏幕上,也不需要繪製,所以你不太可能會遇到內存問題。

+0

Stephan。是的,製作和渲染EditText可能是其中一個原因(請參閱我對上述用戶myCode的回覆)。使用單個editText聽起來很有趣。我不知道這是可能的。我是否可以控制每個單元格(這樣我可以讀取或寫入它們)? – user3268403

+0

@ user3268403,我剛剛編輯了我的答案。 –

+0

斯蒂芬,你的想法似乎是要走的路。內置的Android UI視圖很慢。 – user3268403

1

這可能是在滾動過程中關注EditText時發生的問題,或者您創建了太多的對象並且速度很慢。使用ListView和EditText。使用viewHolder模式回收視圖。這將是光滑的,但我不知道這是你在找什麼。

+0

myCode - 感謝您的迴應。我正在回收視圖。當我將setEnabled設置爲false時,滾動非常平滑(所以我認爲回收站正在工作)。我懷疑幾件事情 – user3268403

+0

1)正如你所提到的,在觸摸事件處理過程中,重點是搞砸了一些事情。2)EditTexts渲染成本很高。我不確定我是否在正確的方向 – user3268403

+0

如何回收視圖? –