我有以下代码为toylist对象toyCatalog中的每个项目动态添加按钮,这是46项。
toyCatalog = new ToyList(content, length);
LinearLayout ll = (LinearLayout)findViewById(R.id.layout);
int numToys = toyCatalog.getNumOfToys();
for(int i =0; i<numToys; i++){
System.out.println("adding button " + i);
Button myButton = new Button(this);
myButton.setText("New Toy");
LayoutParams lp = new LayoutParams(MATCH_PARENT, WRAP_CONTENT);
ll.addView(myButton, lp);
}
然而,当我尝试运行代码时,我得到了
I/Choreographer: Skipped 43 frames! The application may be doing too much work on its main thread.
页面上只显示三个按钮。如何管理主线程上的工作,以便我可以动态添加按钮?
答案 0 :(得分:0)
您看到的消息可能与您的代码无关。使用您提供的代码段无法确定。但是你可以做一点来优化它。
仅查找父视图一次。将此代码移到循环外部,只需在其中引用ll即可。没有理由在每次迭代中找到父级:
LinearLayout ll = (LinearLayout)findViewById(R.id.layout);
您还可以在每次迭代时调用getNumOfToys,将其存储在变量中并在for循环中使用它。看起来已经有length
值,所以可能只是使用它。
同时验证此循环运行的次数。迭代太多肯定会引起问题。
最后,请确保您的LinearLayout具有垂直方向,以便按钮堆叠在一起。默认的水平方向只显示一个按钮。