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
我在使用我创建的复合控件的多个版本时遇到问题。当我在同一个 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