我正在自定義一個Android control。這種控制使用包含一個編輯字段合併佈局(絨毛離開了):Android:嵌入式控件在乘法包含的複合控件中恢復到相同狀態
<merge xmlns:android="http://schemas.android.com/apk/res/android">
...
<EditText android:id="@+id/numberpicker_input">
...
/>
...
</merge>
這對於一個單一的控制工作正常。但是,如果我將這個控件的多個實例放置在佈局中,則在將設備從縱向旋轉到橫向時會導致奇怪的行爲。所有控件都會得到相同的值並將回調附加到錯誤的控件實例上。
經過檢查,發現嵌入的編輯控件具有完全相同的id值。
相關的Java源看起來是這樣的:
public class NumberPicker extends LinearLayout implements OnClickListener,
OnFocusChangeListener, OnLongClickListener, OnEditorActionListener {
private final EditText mText;
....
public NumberPicker(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs);
Log.d(TAG, "Numberpicker create, have id: " + getId());
setOrientation(VERTICAL);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.number_picker, this, true);
...
mText = (EditText) findViewById(R.id.numberpicker_input);
...
}
}
現在,考慮R.id.numberpicker_input的價值,當你有一個佈局的NumberPicker三個獨立的實例。在每種情況下,edittext字段將具有相同的ID。
爲了使自定義控件正常工作,我需要嵌入編輯控件的ID是唯一的。我怎樣才能解決這個問題?
另一種禁用更明確的自動狀態保存的方法是在佈局[或調用View.setSaveEnabled()]中設置android:saveEnabled =「false」。這也允許View ID被有效地設置和使用。 – 2013-11-20 03:17:56