2012-05-08 148 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