我在使用創建的複合控件的多個版本時遇到問題。當我在同一個Fragment
中使用它兩次時,我在第一個控件的EditText
字段中輸入的任何文本將替換爲我在第二個控件旋轉後在第二個控件的EditText
中輸入的文本。我的控制權的兩個版本似乎互相影響。影響彼此的Android複合控件
我的複合控制延伸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
類型和control_2
在EditText
(edittext_label_1
)鍵入文本。然後,當我旋轉我的設備時,我在control_2
中輸入的文本現在顯示在control_1
和control_2`中。
這絕對不是我的代碼這樣做。如果我然後在上面的片段佈局(例如control_2
然後control_1
)中切換我的複合控件的順序,則它切換。我首先在我的片段佈局中放置的控件的旋轉設備時,其控件的值將覆蓋其EditText
值。