Android 复合控件相互影响

Android Compound Controls affecting each other

我在使用我创建的复合控件的多个版本时遇到问题。当我在同一个 Fragment 中使用它两次时,我在第一个控件的 EditText 字段中输入的任何文本都将替换为我在设备之后的第二个控件的 EditText 中输入的文本回转。我的控件的 2 个版本似乎相互影响。

我的复合控件扩展了一个LinearLayout,如下:

public class MyCompoundControl extends LinearLayout {

    public MyCompoundControl(Context context, AttributeSet attrs) {
        super(context, attrs);

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.layout_my_compound_control, this, true);

        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyControlViewOptions);
        String value1 = a.getString(R.styleable.MyControlViewOptions_firstvalue);
        String value2 = a.getString(R.styleable.MyControlViewOptions_secondvalue);
        a.recycle();

        EditText editText1 = (EditText) findViewById(R.id.edittext_label_1);
        EditText editText2 = (EditText) findViewById(R.id.edittext_label_2);
        TextView textView1 = (TextView) findViewById(R.id.textview_label_1);
        TextView textView2 = (TextView) findViewById(R.id.textview_label_2);

        textView1.setText(value1);
        textView2.setText(value2);
    }
}

下面是我的layout.xml文件,用于使用合并的复合控件:

<?xml version="1.0" encoding="utf-8"?>
      <merge xmlns:android="http://schemas.android.com/apk/res/android">    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <TextView
                    android:id="@+id/textview_label_1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
                <EditText
                    android:id="@+id/edittext_label_1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:inputType="numberDecimal" />
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <TextView
                    android:id="@+id/textview_label_2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
                <EditText
                    android:id="@+id/edittext_label_2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:inputType="numberDecimal" />
            </LinearLayout>
        </merge>

然后我在 片段布局 中使用此控件 2x:

xmlns:mycustom="http://schemas.android.com/apk/res-auto"

    ...

    <com.android.mytracker.custom.MyCompoundControl
        android:id="@+id/control_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        mycustom:firstvalue="weight1"
        mycustom:secondvalue="weight2" />

    <com.android.mytracker.custom.MyCompoundControl
        android:id="@+id/control_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        mycustom:firstvalue="height1"
        mycustom:secondvalue="height2" />

然后如果我在 control_1 中输入 EditText (edittext_label_1) 中的文本并在 [=] 中输入 EditText (edittext_label_1) 中的文本23=]。然后当我旋转我的设备时,我在 control_2 中输入的文本现在显示在 control_1 和 control_2` 中。

这绝对不是我的代码做的。如果我随后在上面的 片段布局 中切换我的复合控件的顺序(例如 control_2 然后 control_1),那么它会切换。当我旋转设备时,我放在 片段布局 前面的控件的 EditText 值总是被后面的控件覆盖。

原来有一个相同的问题。使用下面 link 中的所选答案完美解决:

Android: embedded controls in multiply included compound control restore to same state