2012-05-08 127 views
0

我有一个Java应用程序,它将动态添加到容器面板如下。android:为组件动态添加组件

void addBoard(int ID) { 
    BoardPanel p = new BoardPanel(myManager,ID); 
    setAutoLayout(); 
    containerPanel.add(p); 
    containerPanel.repaint(); 
} 

当我尝试将其转换为android应用程序时,它会在调用addView时挂起。问题是什么?请注意,如果用户喜欢,则可以添加1000个视图(BoardPanels),以便不能使用XML布局。

void addBoard(int ID) { 
    BoardPanel p = new BoardPanel(context,myManager,ID); 
    Log.i("Info", "Going to add view"); 
    containerPanel.addView(p); 
    Log.i("Info", "Added"); 
    containerPanel.postInvalidate(); 
} 

感谢


更新:问题似乎是由于线程代码为Aegonis指出。

回答

1

尝试ViewGroup.addView()(FrameLayout,GridLayout,LinearLayout,...都是ViewGroup的所有扩展)。

例如,如果你想被插入查看第一已有查看后:

LinearLayout layout = (LinearLayout) findViewById(R.id.layoutID); 
layout.addView(viewToBeAdded, 1); 
+0

我用的LinearLayout为“containerPanel”和“BoarPanel”为好。我的活动已经开始并显示视图。但后来当我想在用户单击按钮时向容器添加更多视图时,它会挂在addView上,这意味着它可能是不可能的。我还想在用户单击另一个按钮时清除容器中的所有视图。是否有可能在android中做这样的事情? – user1382302

+0

你所描述的应该是完全可能的。我认为问题不在您提供的代码中。这是否都发生在主(UI)线程中? LogCat中是否有任何异常或消息可能提供更多信息?如果是这样:请用它更新你的文章,它会帮助我们/他人解决你的问题。 – gleerman

+0

非常感谢!事实上,我用线程代码来解决问题。但我想知道为什么它与java代码一起工作,即使我没有对它执行invokeLater。在我添加runOnUIthread后,android代码工作。 – user1382302