У меня возникли проблемы с использованием нескольких версий составного элемента управления, который я создал. Когда я использую его дважды в том же Fragment
, любой текст, который я вводил в поле EditText
1-го элемента управления, заменяется текстом, введенным мной в EditText
второго элемента управления после поворота устройства. Кажется, что две версии моего контроля влияют друг на друга.Android Compound Controls, влияющие друг на друга
Мой контроль соединение расширяет 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" />
Тогда, если я ввожу текст в EditText
(edittext_label_1
) в control_1
и введите текст в EditText
(edittext_label_1
) в control_2
. Затем, когда я поворачиваю свое устройство, текст, введенный мной в control_2
, теперь отображается как в control_1
, так и в контроле_2`.
Это не мой код, делающий это. Если я затем переключу порядок моих составных элементов управления в фрагмент (например, control_2
, затем control_1
), то он переключается. Элемент управления, который я поставил первым в своем макете , всегда имеет значение EditText
, которое перезаписывается элементом управления, который появляется после него, когда я поворачиваю устройство.