12

プログラムで線形レイアウトにビューを追加しようとしています。

    LinearLayout layout     = (LinearLayout) findViewById(R.id.info);
    String [] informations  = topOffer.getInformations();
    TextView informationView;
    View line = new View(this);
    line.setLayoutParams(new LayoutParams(1, LayoutParams.FILL_PARENT));
    line.setBackgroundColor(R.color.solid_history_grey);
    for (int i = 0; i < informations.length; i++) {
        informationView = new TextView(this);
        informationView.setText(informations[i]);
        layout.addView(informationView, 0);
        layout.addView(line, 1);
    }

まず、informationsView を追加しただけで、すべて正常に機能しました。しかし、ラインビューも追加した後、次のエラーでクラッシュしました:

java.lang.IllegalStateException: 指定された子にはすでに親があります。最初に子の親で removeView() を呼び出す必要があります。

そこで、addView(View v, int index) を試してみましたが、同じメッセージでクラッシュしました...

誰かが解決策を持っていますか?

ありがとう、マーティン

4

2 に答える 2

12

gpmoo7 が言ったように、ループ内で毎回新しいビューを作成する必要があります

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.linear);

    LinearLayout layout = (LinearLayout) findViewById(R.id.linear);

    String[] informations = new String[] { "one", "two", "three" };
    TextView informationView;

    for (int i = 0; i < informations.length; i++) {
        View line = new View(this);
        line.setLayoutParams(new LayoutParams(1, LayoutParams.MATCH_PARENT));
        line.setBackgroundColor(0xAA345556);
        informationView = new TextView(this);
        informationView.setText(informations[i]);
        layout.addView(informationView, 0);
        layout.addView(line, 1);
    }

}
于 2011-01-27T00:07:17.653 に答える
2

同じ親ビューに同じ子ビューを複数回追加することはできません。毎回、新しいビューを作成するか、新しいビューを膨らませる必要があります。

于 2011-01-19T00:24:34.940 に答える