Получите информацию о AutocompleteTextView от получающегося AutoCompleteTextView$DropDownListView

Я использую 3 AutocompleteTextViews для предложения записей от базы данных. Я разделил AutocompleteTextView на подклассы для обработки установки в NULL текста по умолчанию при нажатии и задерживающий к инструкциям по умолчанию, если отодвинуто и ничто не вводится.

Я использовал SimpleCursorAdapter для привязки с представлением, но я обнаружил, что не было никакого способа, которым я мог получить идентификатор AutocompleteTextView от OnItemClickListener, который я должен был поместить дополнительную информацию от выбранной строки в переменной, в зависимости от которой AutocompleteTextView это было от. Все, к чему я мог получить доступ, было AutoCompleteTextView$DropDownListView, который является недокументированным внутренним классом, который, кажется, не предлагает реальной функциональности. Ни один не был там способом повыситься иерархия представления для получения исходного AutocompleteTextView.

Таким образом, я разделил SimpleCursorAdapter на подклассы и добавил интервал к конструктору для идентификации, от которого AutocompleteTextView был адаптер, и я смог получить доступ, это от представления передало в OnItemClick (). Так, хотя мое решение хорошо работает, интересно, возможно ли получить идентификатор AutocompleteTextView от его DropDownListView?

Я также использую другой запрос базы данных, который получает идентификатор от OnItemClick и затем ищет данные для того объекта, потому что я не мог найти способ преобразовать больше чем один столбец в строку. Я должен использовать CursorAdapter для этого, для сохранения инициирования другой запрос? О, и другая вещь, мне нужен курсор базы данных первоначально (all_cursor), когда все, что я делаю, фильтрует на ней для получения нового курсора? Походит на излишество.

Действие....

    dbse.openDataBase();
    Cursor all_Cursor = dbse.autocomplete_query();
    startManagingCursor(all_Cursor);
    String[] from_all = new String[]{DbAdapter.KEY_NAME};
    int[] to_all = new int[] {android.R.id.text1};
    from_adapt = new AutocompleteAdapter(FROM_DBADAPTER, this,android.R.layout.simple_dropdown_item_1line, all_Cursor, from_all, to_all);
    from_adapt.setStringConversionColumn(1);
    from_adapt.setFilterQueryProvider(this);
    to_adapt = new AutocompleteAdapter(TO_DBADAPTER, this,android.R.layout.simple_dropdown_item_1line, all_Cursor, from_all, to_all);
    to_adapt.setStringConversionColumn(1);
    to_adapt.setFilterQueryProvider(this);   
from_auto_complete = (Autocomplete) findViewById(R.id.entry_from);
from_auto_complete.setAdapter(from_adapt);
from_auto_complete.setOnItemClickListener(this);

to_auto_complete = (Autocomplete) findViewById(R.id.entry_to);
to_auto_complete.setAdapter(to_adapt);
to_auto_complete.setOnItemClickListener(this);

public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
    Cursor selected_row_cursor = dbse.data_from_id(id);
    selected_row_cursor.moveToFirst();
    String lat = selected_row_cursor.getString(1);
    String lon = selected_row_cursor.getString(2);
    int source = ((AutocompleteAdapter) parent.getAdapter()).getSource();

Класс автоматического заполнения:

public class Autocomplete extends AutoCompleteTextView implements  OnTouchListener,OnFocusChangeListener{

String textcontent;
Context mycontext = null;
int viewid = this.getId();

public Autocomplete(Context context, AttributeSet attrs) {
super(context, attrs);
textcontent = this.getText().toString();
mycontext = context;
this.setOnFocusChangeListener(this);     
this.setOnTouchListener(this);
}
public boolean onTouch(View v, MotionEvent event) {
if (textcontent.equals(mycontext.getString(R.string.from_textbox)) |
textcontent.equals(mycontext.getString(R.string.to_textbox)) |
textcontent.equals(mycontext.getString(R.string.via_textbox))) {
this.setText("");
}
return false;
}
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus == false) {
int a = this.getText().length();
if (a == 0){
if (viewid == R.id.entry_from) {this.setText(R.string.from_textbox);}
if (viewid == R.id.entry_to) {this.setText(R.string.to_textbox);}
if (viewid == R.id.entry_via) {this.setText(R.string.via_textbox);}
}
}
}
}

Адаптер:

public class AutocompleteAdapter extends SimpleCursorAdapter {
int source;
public AutocompleteAdapter(int query_source, Context context, int layout, Cursor c,
        String[] from, int[] to) {
    super(context, layout, c, from, to);
    source = query_source;
}
public int getSource() {
    return source;
}
    }

извините это - много кода!Спасибо за помощь.

Stephen

6
задан Stev_k 30 March 2010 в 21:10
поделиться