package dbfields; import android.content.Context; import android.os.Parcel; import android.os.Parcelable; import android.text.Editable; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.util.AttributeSet; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import java.util.ArrayList; import java.util.List; public class SpinnerDB extends Spinner implements selectDB { private String m_Value = null; private List m_lName = new ArrayList(); //Заголовки private List m_lVal = new ArrayList(); //Значения private Context m_context = null; private List m_lChange = new ArrayList(); //Слушатели изменений private OnItemSelectedListener listener = new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parentView, View selectedItemView, int position, long id) { if(getSelectedItemPosition()!=INVALID_POSITION && position != INVALID_POSITION) SpinnerDB.this.setValue(m_lVal.get(getSelectedItemPosition())); } @Override public void onNothingSelected(AdapterView parentView) { } }; /** * Добавить слушателя смены значения (не клика) * @param listener */ public void addOnChangeValueListener(OnClickListener listener) { m_lChange.add(listener); } /** * Удалить слушателя смены значений * @param listener */ public void remOnChangeValueListener(OnClickListener listener) { m_lChange.remove(listener); } public SpinnerDB(Context context, AttributeSet attrs) { super(context,attrs); m_context = context; setOnItemSelectedListener(listener); } /** * Получить значение */ public String getValue() { return m_Value; } /** Присвоить значение полю и попытаться найти его в выподающем списке*/ public void setValue(String value) { if(m_Value == value) return; m_Value = value; updatePosition(); //Информируем слушателей о изменении значении for(int i=0;i dataAdapter = new ArrayAdapter(m_context, android.R.layout.simple_spinner_item, m_lName); dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); this.setAdapter(dataAdapter); setOnItemSelectedListener(listener); updatePosition(); //Чтоб установилось на существующее значение если оно есть } public void clearFields() { m_lName.clear(); m_lVal.clear(); //Обновляем список setOnItemSelectedListener(null); ArrayAdapter dataAdapter = new ArrayAdapter(m_context, android.R.layout.simple_spinner_item, m_lName); dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); this.setAdapter(dataAdapter); setOnItemSelectedListener(listener); } /** * Обновить позицию вып списка в соответствии со значением */ protected void updatePosition() { Boolean b=true; for(int i=0;i CREATOR = new Parcelable.Creator() { public SavedStateSPNR createFromParcel(Parcel in) { return new SavedStateSPNR(in); } public SavedStateSPNR[] newArray(int size) { return new SavedStateSPNR[size]; } }; private SavedStateSPNR(Parcel in) { super(in); value = in.readString(); } } @Override public Parcelable onSaveInstanceState() { SavedStateSPNR st = new SavedStateSPNR(super.onSaveInstanceState()); st.value = getValue(); if(st.value==null) st.value=""; return st; } @Override public void onRestoreInstanceState(Parcelable state) { if (state == null || !(state instanceof SavedStateSPNR)) { super.onRestoreInstanceState(state); return; } SavedStateSPNR ss = (SavedStateSPNR) state; super.onRestoreInstanceState(ss.getSuperState()); setValue(ss.value); }; }