在Android程序中动态添加按钮

时间:2016-04-09 16:25:37

标签: java android multithreading dynamic

我有以下代码为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.

页面上只显示三个按钮。如何管理主线程上的工作,以便我可以动态添加按钮?

1 个答案:

答案 0 :(得分:0)

您看到的消息可能与您的代码无关。使用您提供的代码段无法确定。但是你可以做一点来优化它。

仅查找父视图一次。将此代码移到循环外部,只需在其中引用ll即可。没有理由在每次迭代中找到父级:

LinearLayout ll = (LinearLayout)findViewById(R.id.layout);

您还可以在每次迭代时调用getNumOfToys,将其存储在变量中并在for循环中使用它。看起来已经有length值,所以可能只是使用它。

同时验证此循环运行的次数。迭代太多肯定会引起问题。

最后,请确保您的LinearLayout具有垂直方向,以便按钮堆叠在一起。默认的水平方向只显示一个按钮。