私はこの問題をしばらく解決しています。 私はトップトレンドキーワードを集めてArrayListに配置したいと考えています。 各キーワードはtoggleButtonに配置されます(ユーザーはキーワードを選択して検索を強化します)。私はボタンをAndroidのモバイルアプリケーション上のフォームのようなグリッドにする必要がある、私はまた、後で参照することができるようにボタンをArrayListに配置する必要があります。私は非常に多くの異なるループをループ内でループしようとしましたが、同じ2つの問題を抱え続けています:テーブルやグリッドのようなフォームレイアウトにプログラムでボタンを動的に追加する
prob 1)レイアウト内にボタンを作成するとキーワードが読み込まれないか、ループ。
PROB 2)私が最初にボタンを作成し、レイアウトループでそれらを参照すると、私はエラーメッセージを取得:
「java.lang.IllegalStateException:指定された子は、すでに親を持っているとあなたが呼び出す必要があります子供の親の最初のremoveView()を実行します。 "
私はインターネットをスキャンしました。私はさまざまな方法を試しました。私は自分のコードに欠けていると思います。このコードレイヤーは、 、これはボタンを保持しています...任意のポインタが評価されます。
trending = new ArrayList<String>() {
{
add("one"); add("two"); add("three") ;add("four");add("five");
add("six");add("seven");add("eight");add("nine");add("ten");
add("eleven");
}};
//LAYOUT SETTINGS 5
TableLayout rLayout5 = new TableLayout(this);
rLayout5.setOrientation(TableLayout.VERTICAL);
LayoutParams param7 = new LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
param7.addRule(RelativeLayout.BELOW, rLayout4.getId());
rLayout5.setBackgroundColor(Color.parseColor("#EEEBAA"));
rLayout5.setLayoutParams(param7);
// List<ToggleButton> togButtStore = new ArrayList<ToggleButton>();
int i = 0 ;
while (i < trending.size()){
if (i % 3 == 0){
tr = new TableRow(this);
rLayout5.addView(tr);
}
toggBtn = new ToggleButton(this);
toggBtn.setText(trending.get(i));
toggBtn.setId(i);
toggBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//something here
}
});
tr.addView(toggBtn);
i++;
}
rLayout5.addView(tr); ///<---error points to this line
root.addView(rLayout1);
rLayout1.addView(text1);
root.addView(rLayout4);
root.addView(rLayout3);
root.addView(rLayout5);
setContentView(root);
}
rLayout5にtrを2回追加しています。エラーのある行を削除してください.... – Alex
ああ、笑!私もforループで試してみましたが、同じエラーメッセージが表示されていましたので、whileループで試してみたところ、まったく同じエラーメッセージが表示されました。私は一日書き換えコードを改造して、単純なものを失ってしまった。それは今完璧に働くおかげで – Boo