247 lines
7.5 KiB
Java
247 lines
7.5 KiB
Java
package dbfields;
|
||
|
||
import android.content.Context;
|
||
import android.database.Cursor;
|
||
import android.os.Parcel;
|
||
import android.os.Parcelable;
|
||
import android.text.InputType;
|
||
import android.util.AttributeSet;
|
||
import android.view.View;
|
||
import android.widget.AdapterView;
|
||
import android.widget.ArrayAdapter;
|
||
import android.widget.AutoCompleteTextView;
|
||
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
|
||
import kz.istt.locust.DbOpenHelper;
|
||
import kz.istt.locust.LocustActivity;
|
||
import kz.istt.locust.R;
|
||
|
||
import static android.widget.AdapterView.INVALID_POSITION;
|
||
|
||
public class AutoCompleteTextViewDB extends AutoCompleteTextView implements selectDB {
|
||
private String m_Value = null;
|
||
private List<String> m_lName = new ArrayList<String>(); //Заголовки
|
||
private List<String> m_lVal = new ArrayList<String>(); //Значения
|
||
public ArrayAdapter<String> dataAdapter = null;
|
||
private Context m_context = null;
|
||
|
||
private List<OnClickListener> m_lChange = new ArrayList<OnClickListener>(); //Слушатели изменений
|
||
|
||
/*private AdapterView.OnItemSelectedListener listener = new AdapterView.OnItemSelectedListener() {
|
||
@Override
|
||
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
|
||
if (getSelectedItemPosition() != INVALID_POSITION && position != INVALID_POSITION)
|
||
AutoCompleteTextViewDB.this.setValue(m_lVal.get(getSelectedItemPosition()));
|
||
}
|
||
|
||
@Override
|
||
public void onNothingSelected(AdapterView<?> parentView) {
|
||
}
|
||
};*/
|
||
|
||
private AdapterView.OnItemClickListener listener = new AdapterView.OnItemClickListener() {
|
||
@Override
|
||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||
int pos=getSelectedItemPosition();
|
||
String val=m_lVal.get(pos);
|
||
AutoCompleteTextViewDB.this.setValue(val);
|
||
}
|
||
};
|
||
|
||
int getSelectedItemPosition() {
|
||
String str = this.getText().toString();
|
||
int pos=INVALID_POSITION;
|
||
for(int i=0; i<m_lName.size();i++)
|
||
{
|
||
if(str.equals(m_lName.get(i).toString())) {
|
||
pos = i;
|
||
break;
|
||
}
|
||
}
|
||
return pos;
|
||
}
|
||
/**
|
||
* Добавить слушателя смены значения (не клика)
|
||
* @param listener
|
||
*/
|
||
public void addOnChangeValueListener(OnClickListener listener)
|
||
{
|
||
m_lChange.add(listener);
|
||
}
|
||
|
||
/**
|
||
* Удалить слушателя смены значений
|
||
* @param listener
|
||
*/
|
||
public void remOnChangeValueListener(OnClickListener listener)
|
||
{
|
||
m_lChange.remove(listener);
|
||
}
|
||
|
||
/*Консткукто*/
|
||
public AutoCompleteTextViewDB(Context context, AttributeSet attrs)
|
||
{
|
||
super(context,attrs);
|
||
m_context=context;
|
||
//setOnItemSelectedListener(listener);
|
||
setOnItemClickListener(listener);
|
||
setInputType(InputType.TYPE_NULL); //Disable writing to field
|
||
}
|
||
|
||
/**
|
||
* Получить значение
|
||
*/
|
||
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(this);
|
||
}
|
||
}
|
||
|
||
/*public String getText(){
|
||
//
|
||
}*/
|
||
|
||
public void addField(String name, String val)
|
||
{
|
||
m_lName.add(name);
|
||
m_lVal.add(val);
|
||
|
||
//Обновляем список
|
||
//setOnItemSelectedListener(null); //Чтоб событие не сработало
|
||
setOnItemClickListener(null);
|
||
dataAdapter = new ArrayAdapter<String>(m_context, R.layout.dropdown_item, m_lName);
|
||
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||
this.setAdapter(dataAdapter);
|
||
//setOnItemSelectedListener(listener);
|
||
setOnItemClickListener(listener);
|
||
|
||
updatePosition(); //Чтоб установилось на существующее значение если оно есть
|
||
}
|
||
|
||
public void clearFields()
|
||
{
|
||
m_lName.clear();
|
||
m_lVal.clear();
|
||
|
||
//Обновляем список
|
||
//setOnItemSelectedListener(null);
|
||
setOnItemClickListener(null);
|
||
dataAdapter = new ArrayAdapter<String>(m_context, R.layout.dropdown_item, m_lName);
|
||
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||
this.setAdapter(dataAdapter);
|
||
//setOnItemSelectedListener(listener);
|
||
setOnItemClickListener(listener);
|
||
}
|
||
|
||
public void updateAdapter(Context context){
|
||
//Обновляем список
|
||
setOnItemClickListener(null);
|
||
dataAdapter = new ArrayAdapter<String>(context, R.layout.dropdown_item, m_lName);
|
||
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||
this.setAdapter(dataAdapter);
|
||
setOnItemClickListener(listener);
|
||
}
|
||
|
||
|
||
/**
|
||
* Обновить позицию вып списка в соответствии со значением
|
||
*/
|
||
public void updatePosition()
|
||
{
|
||
Boolean b=true;
|
||
for(int i=0;i<m_lVal.size();i++)
|
||
{
|
||
if(m_lVal.get(i).equals(m_Value))
|
||
{
|
||
setText(m_lName.get(i)); //setSelection(i);
|
||
b=false;
|
||
break;
|
||
}
|
||
}
|
||
if(b) setText(""); //setSelection(INVALID_POSITION);
|
||
|
||
updateAdapter(m_context);
|
||
}
|
||
|
||
public void setOnChangeValueListener(View.OnClickListener listener){
|
||
this.addOnChangeValueListener(listener);
|
||
}
|
||
/*
|
||
// Класс для сохранения изменений сделаных пользователем при повороте экрана
|
||
public static class SavedState extends BaseSavedState
|
||
{
|
||
String value = ""; //Не может быть null почемуто вылетает!
|
||
|
||
SavedState(Parcelable superState)
|
||
{
|
||
super(superState);
|
||
}
|
||
|
||
@Override
|
||
public void writeToParcel(Parcel out, int flags)
|
||
{
|
||
super.writeToParcel(out, flags);
|
||
out.writeString(value);
|
||
}
|
||
|
||
public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>()
|
||
{
|
||
public SavedState createFromParcel(Parcel in)
|
||
{
|
||
return new SavedState(in);
|
||
}
|
||
|
||
public SavedState[] newArray(int size)
|
||
{
|
||
return new SavedState[size];
|
||
}
|
||
};
|
||
|
||
private SavedState(Parcel in)
|
||
{
|
||
super(in);
|
||
value = in.readString();
|
||
}
|
||
|
||
}
|
||
|
||
@Override
|
||
public Parcelable onSaveInstanceState()
|
||
{
|
||
SavedState st = new SavedState(super.onSaveInstanceState());
|
||
st.value = getValue();
|
||
if(st.value==null) st.value="";
|
||
return st;
|
||
}
|
||
|
||
@Override
|
||
public void onRestoreInstanceState(Parcelable state)
|
||
{
|
||
if (state == null || !(state instanceof SavedState))
|
||
{
|
||
super.onRestoreInstanceState(state);
|
||
return;
|
||
}
|
||
|
||
SavedState ss = (SavedState) state;
|
||
super.onRestoreInstanceState(ss.getSuperState());
|
||
setValue(ss.value);
|
||
};
|
||
*/
|
||
}
|