Files
org.ccalm.asdc/app/src/main/java/dbfields/AutoCompleteTextViewDB.java
2023-11-06 11:50:11 +06:00

247 lines
7.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
};
*/
}