10/10/14 21:14:01
RelativeLayoutやLinearLayoutなどでまとめられたいくつかのUIを画面に追加する、という機能を作りたいのですが、
// サブ
setContentView(R.layout.x);
RelativeLayout rl = (RelativeLayout)findViewById(R.id.xid);
// メイン
LinearLayout main;
main = (LinearLayout)findViewById(R.id.main);
main.addView(rl);
main.addView(rl);
というように、同じものに対してaddView()を複数回やろうとすると、2回目のaddView()でIllegalStateExceptionが発生してしまいます。
これは既に「rl」に対して親が割り当てられているために、それを開放しないまま再度割り当てようとすると発生しているのだと認識しています。
じゃあ「rl」を別の変数に分ければいいのか、と思って
// サブ
setContentView(R.layout.x);
RelativeLayout rl1 = (RelativeLayout)findViewById(R.id.xid);
RelativeLayout rl2 = (RelativeLayout)findViewById(R.id.xid);
// メイン
LinearLayout main;
main = (LinearLayout)findViewById(R.id.main);
main.addView(rl1);
main.addView(rl2);
としましたが、結果は同じでした。
どうやら「rl」というより、「R.id.xid」が被っていることが問題のようです。
最終的に「ボタンを押すたびに決まったUIグループが画面に追加される」という機能を実現したいので、「R.id.xid」を分けるということができません。
XMLからUIグループを読み込むという方式を変えず、この問題を回避・解決する方法はないでしょうか?