优化性能以在运行时创建视图

时间:2014-11-11 09:33:46

标签: android performance programmatically-created

我遇到了性能缓慢的问题......

刚拿一个案例:

RelativeLayout myLayout = (RelativeLayout) findViewById(R.id.myrlLayout);
//Adding now 100 Buttons with 100 TextViews below each Button(just a example)
for(i=0;i<100;i++) {
    Button btn = new Button(this);
    btn.setId(i+1); //Should be a positive integer
    //set LayoutParams for Button
    RelativeLayout.Layoutparams btn_layoutparams = new RelativeLayout.LayoutParams....
    ....
    myLayout.addView(btn, btn_layoutparams);
    TextView mytv = new TextView(this);
    mytv.setid(101+i);
    //set LayoutParams for Button with referenced to the Button(because the Textview Needs to be
    of Button)
    ....
    myLayout.addView(mytv, tv-layoutparams);
}

关于以编程方式创建的大量视图,我的应用程序启动真的很慢...... 我认为这不是因为创建了一个新视图,而是因为每次为视图设置LayoutParamters。我找不到一个解决方法,因为我的TextView的LayoutParams例如需要引用之前创建的按钮。由于我不能真正创建XML布局文件或XML样式文件,因为我无法将XML文件中的tv的layoutparameters锚引用到Moment上不存在的按钮。至少我找不到办法。我希望有人知道在运行时创建如此多的视图时如何明显改进性能。欢迎提出任何建议。

关于来自rom4ek的回复

问题是,我需要计算在完全使用屏幕宽度之前每行可以添加多少视图。这意味着我需要第二个LayoutParams来添加第一行中第一个Button下面的下一个Button。而且我还需要引用之前在LayoutParams中添加的img-Button ..所以不可能将LayoutParams引用到for-loop之前不存在的Button.Maybe我完全错过了什么..你有吗?想法/解决方案?谢谢你的回复。

1 个答案:

答案 0 :(得分:0)

如果您设置相同的LayoutParams,如果您在周期之前移动RelativeLayout.Layoutparams btn_layoutparams = new RelativeLayout.LayoutParams....会怎样?因此,您将初始化它一次,然后无需每步创建新的LayoutParams。