2011-11-15 11 views
1

私は動的にテーブルの行を作ってから、イメージビューとテキストビューを動的に追加するアンドロイドアプリを作成しています。Android:java.lang.IllegalStateException:指定された子がすでに親を持っています。子の親で最初にremoveView()を呼び出す必要があります。

  ar1= new JSONArray(children.toString()); 
           for(int mn=0;mn<ar1.length();mn++){ 
            value=ar1.getString(mn); 
    TableRow tr = new TableRow(HomePageWithPhoneIsOfflineDialog.this); 
            tr.setBackgroundColor(Color.WHITE); 
            tr.setId(100+mn); 
            tr.setMinimumHeight(60); 
            tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
            TextView child= new TextView(HomePageWithPhoneIsOfflineDialog.this); 
            child.setId(200+mn); 
            child.setHeight(50); 
            child.setGravity(Gravity.CENTER); 
            child.setTextColor(Color.BLACK); 
            System.out.println(value); 
            child.setText(value); 
            System.out.println("adding iv"); 
            tr.addView(iv,0); 
            System.out.println("adding child"); 
            tr.addView(child); 
            System.out.println("adding table row"); 
            table.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 

}

を誰がどのようにこの問題を解決するために教えてもらえます: それは私がそれのために以下のコードを使用しています最初の行を追加し、次の例外に

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 

を与えます。

+0

* *ここで*はその例外をスローしますか? –

+0

ここで位置を指定する... tr.addView(子);常に同じではありません。 – Noby

答えて

6

IV変数は、私が以前に作成されたと想像してループ内で作成されていません...しかし、第二のループでは、2つの異なるテーブルの行に追加されます。

5
tr.addView(iv,0); 

問題がImageView(IV)である

おかげで、私は、それがループ内でインスタンス化されていないため、だと思うので、最初の時間は、それが行に加えて、あなたは再びそれを追加するとき別の行は許可されません。ビューには親が1つしかないためです。

だから、ループするたびに新しいImageViewを作成することをお勧めします。

1

各繰り返しで同じ値の新しいビューを追加するためです。

イメージを初期化するiv、before tr.addView(iv、0);追加する

ImageView in = new ImageView(ctx) 
関連する問題