1

コントロール付きのレイアウトがあります:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/contact_phones_layout_row"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <EditText
        android:id="@+id/contact_phone"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:inputType="phone" />

    <Spinner
        android:id="@+id/contact_phone_type"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />

</LinearLayout>

そして、フラグメントの別のレイアウトに膨らませたいと思います。これらのコントロールの数は、配列内の値によって異なります。配列にはコントロール オブジェクトが含まれます。そのため、onCreateView が立ち上がるたびに、配列からレイアウトを埋めました。

private void addLine(PhoneLine line) {
        LinearLayout layout = (LinearLayout) mLayout.findViewById(R.id.contact_phones_layout);
        View view = line.getParent();
        ((ViewGroup) view.getParent()).removeView(view);
        layout.addView(view, layout.getChildCount() - 1);
        setButtonVisible(false);
    }

行が null の場合、コントロールは次のように作成されます。

private void addLine() {
        LinearLayout layout = (LinearLayout) mLayout.findViewById(R.id.contact_phones_layout);
        View view = inflater.inflate(R.layout.contact_phone_line, layout, false);
        EditText phoneEditText = (EditText) view.findViewById(R.id.contact_phone);
        Spinner phoneType = (Spinner) view.findViewById(R.id.contact_phone_type);
        phoneLines.add(new PhoneLine(phoneEditText, phoneType, view));
        layout.addView(view, layout.getChildCount() - 1);
    }

しかし、その後、すべての EditText/Spinner コントロールで同じ値を取得します。値は配列の最後の要素と同じです。何が間違っている可能性がありますか?コントロールを動的に追加するより純粋な方法があるかもしれませんか?

4

1 に答える 1

0

onCreateViewではなく、onResumeの立ち上がり時にコントロールを追加することで修正しました。しかし、onCreateView がすべての値を変更する理由はまだわかりません。

于 2013-04-08T05:09:18.623 に答える