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);
    }

如果 line 为 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

我通过在 onResume 上升时添加控件来修复它,而不是 onCreateView。但我仍然不明白为什么 onCreateView 会更改所有值。

于 2013-04-08T05:09:18.623 回答