Первая

This commit is contained in:
Igor I
2023-11-06 11:50:11 +06:00
commit bf93c88af3
351 changed files with 34556 additions and 0 deletions

View File

@ -0,0 +1,213 @@
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<String> m_lName = new ArrayList<String>(); //Заголовки
private List<String> m_lVal = new ArrayList<String>(); //Значения
private Context m_context = null;
private List<OnClickListener> m_lChange = new ArrayList<OnClickListener>(); //Слушатели изменений
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<m_lChange.size();i++)
{ m_lChange.get(i).onClick(getEmptyView());
}
}
public void addField(String name, String val)
{
m_lName.add(name);
m_lVal.add(val);
//Обновляем список
setOnItemSelectedListener(null); //Чтоб событие не сработало
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(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<String> dataAdapter = new ArrayAdapter<String>(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<m_lVal.size();i++)
{
if(m_lVal.get(i).equals(m_Value))
{
setSelection(i);
b=false;
break;
}
}
if(b) setSelection(INVALID_POSITION);
}
// Return the currently selected title (not a value)
public Editable getText(){
String result="";
for(int i=0;i<m_lVal.size();i++)
{
if(m_lVal.get(i).equals(m_Value))
{
result=m_lName.get(i);
break;
}
}
return new SpannableStringBuilder(result);
}
public void setOnChangeValueListener(View.OnClickListener listener){
this.addOnChangeValueListener(listener);
}
// Класс для сохранения изменений сделаных пользователем при повороте экрана
public static class SavedStateSPNR extends BaseSavedState
{
String value = ""; //Не может быть null почемуто вылетает!
SavedStateSPNR(Parcelable superState)
{
super(superState);
}
@Override
public void writeToParcel(Parcel out, int flags)
{
super.writeToParcel(out, flags);
out.writeString(value);
}
public static final Parcelable.Creator<SavedStateSPNR> CREATOR = new Parcelable.Creator<SavedStateSPNR>()
{
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);
};
}