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

Try ViewGroup.addView()(FrameLayout、GridLayout、LinearLayout、...はViewGroupのすべての拡張です)。

たとえば、あなたは、ビューが最初に既存のビューの後に挿入されるようにする場合:

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

私も「containerPanel」と「BoarPanel」のためのLinearLayoutを使用。私の活動はすでに開始されており、ビューが表示されています。しかし、後でユーザーがボタンをクリックしたときにコンテナにビューを追加したい場合は、addViewでハングするため、不可能である可能性があります。また、ユーザーが別のボタンをクリックしたときにコンテナ内のすべてのビューを消去したいとします。そのようなことをアンドロイドで行うことは可能でしょうか? – user1382302

+0

あなたが何を記述しているのか確かに完全に可能でなければなりません。私は問題があなたが提供するコードにないと思う。これはすべてメイン(UI)スレッドで行われますか?あなたのLogCatに、より多くの情報を提供する可能性のある例外またはメッセージはありますか?もしそうなら:あなたの投稿を更新してください。私たち/他の人たちがあなたの問題を解決するのに役立ちます。 – gleerman

+0

ありがとう!実際、私は問題であるスレッドコードを使用しました。しかし、私はそれがinvokeLaterをしなかったにもかかわらず、なぜそれがJavaコードで動作するのだろうかと思います。 runOnUIthreadを追加した後、アンドロイドコードが機能しました。 – user1382302