2014-02-11 44 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

如何回收视图? –