Android 如何加速循环

Android 如何加速循环,android,for-loop,textview,Android,For Loop,Textview,我根据用户响应动态地将文本视图添加到相对布局中,以创建彩色网格图案。通常,它可以包含5000多个文本视图,这些文本视图根据textview标记中的值具有不同的背景颜色 我有一种方法,迭代所有文本视图,只显示那些颜色相同的文本视图,并将其余文本视图设置为灰色。当有500个文本视图时,这个方法很有效,但是当这个数字更高时,比如5000个,它需要13秒才能完成 if (code.equals("all")) { for (int i = 0; i < textViewIDs.size()

我根据用户响应动态地将文本视图添加到相对布局中,以创建彩色网格图案。通常,它可以包含5000多个文本视图,这些文本视图根据textview标记中的值具有不同的背景颜色

我有一种方法,迭代所有文本视图,只显示那些颜色相同的文本视图,并将其余文本视图设置为灰色。当有500个文本视图时,这个方法很有效,但是当这个数字更高时,比如5000个,它需要13秒才能完成

if (code.equals("all")) {
    for (int i = 0; i < textViewIDs.size(); i++) {
        TextView tv = (TextView) findViewById(textViewIDs.get(i));
        if (!tv.getTag().toString().equals("header")) {
            tv.setBackgroundColor(Color.parseColor("#" + tv.getTag().toString()));
        }
    }
} else {
    for (int i = 0; i < textViewIDs.size(); i++) {
        TextView tv = (TextView) findViewById(textViewIDs.get(i));
        if (!tv.getTag().equals(code)) {
            if (!tv.getTag().toString().equals("header")) {
                tv.setBackgroundColor(Color.LTGRAY);
             }
        }else{
            tv.setBackgroundColor(Color.parseColor("#" + tv.getTag().toString()));
        }
    }
}
if(code.equals(“all”)){
对于(int i=0;i
TextViewID是包含所有textview ID的数组

如果可以做些什么来加快速度呢

更新: 我知道拥有这么多的小部件并不理想,但我想不出更好的解决方案。 以及每个网格单元,在本例中是每个texview,具有不同的颜色,我还需要能够管理单元的onclick事件,以便添加文本。这就是文本视图的理由。在使用textviews之前,我绘制了所有元素,但那时我找不到向每个单元格添加onclick事件的方法

如果我走错了路,我最好详细介绍一下这个概念,以帮助你们实现我的目标

这是一个更大的应用程序的一部分,我正在将图像转换为缝合图。 根据用户输入,绘制彩色单元格网格,其中每个单元格是从原始图像最主要颜色计算得出的纯色。 网格将比屏幕大,因此我的视图将同时放置在水平视图和滚动视图中,以便可以平移和缩放。(这一切都很顺利)。 网格单元格必须单击“启用”,以便打开或关闭背景色,并添加单个文本“X”字符以将缝合(单元格)标记为已完成。(当textview(单元格)的数量>500时,这会减慢速度)

希望这里有足够的细节…

findViewById()
似乎是您的压力点。 与其保留ID列表,不如保留对
视图
s本身的引用列表(
WeakReference
s,如果可能泄漏)

findViewById()
似乎是您的压力点。
与其保留ID列表,不如保留对
视图
s本身的引用列表(
WeakReference
s,如果可能泄漏)

如果有那么多的
TextView
,低端设备将无法加载它,这是一种糟糕的做法

尝试制作一个包含多种样式的
TextView
,您可以使用HTML标记作为背景色


或者更好的做法是只创建一个
列表视图
,这将为您回收视图。

让这么多
文本视图
,低端设备将无法加载它是一种不好的做法

尝试制作一个包含多种样式的
TextView
,您可以使用HTML标记作为背景色

或者更好的方法是只创建一个
ListView
,这将为您回收视图。

1-for(int i=0;i在开始循环之前,预先计算变量中的限制:
int len=textViewIDs.size();并在循环中使用len

2-i--(我称之为“反向循环”)似乎比i++快。请查看一个很好的循环比较

1-对于(int i=0;i在开始循环之前,预先计算变量中的限制:
int len=textViewIDs.size();并在循环中使用len



2-i--(我称之为“反向循环”)似乎比i++快。查看一个很好的循环比较

arrays have not get方法。它不是数组,它的数组列表…但我不认为你实际上可以加快循环速度…但数组排序后速度更快,但这对你有很大帮助:)或者尝试使用ListView你不应该一次在屏幕上显示5000个文本视图。也许你可以扩展关于您试图完成的内容-也许ListView或其他替代容器可以提供更干净的解决方案。有人能解释我的问题被标记的原因吗?数组没有得到方法。它不是数组,它的数组列表…但我认为您实际上无法加快循环速度…但数组排序后速度更快,但这需要帮助(非常感谢:)或者尝试使用ListView您不应该一次在屏幕上显示5000个文本视图。也许您可以扩展您正在尝试完成的内容-也许ListView或其他替代容器可以提供更干净的解决方案。有人能解释为什么我的问题被标记下来吗?谢谢,那是什么类型的列表?ArrayList?一个ArrayList肯定会完成这项工作!在用您的想法更新代码之后(nyx),而不是现在的13秒。谁会想到这会有这么大的不同。我还加入了Artoo预计算循环限制的想法。谢谢guysThanks,那会是什么样的列表?ArrayList?ArrayList肯定会完成这项工作!用你的想法更新代码后(nyx),而不是13秒,现在是瞬间。谁想到会有这么大的不同。我还加入了Artoo预先计算循环限制的想法。感谢有意义的家伙,它减少了循环限制