2011-01-27 7 views
27

У меня есть AutoCompleteTextView в моем приложении, которое работает. Я успешно создал onClickItemListener. Вопрос заключается в том, как захватить текст, выбранный пользователем. И вот что: у меня есть ArrayList со словами, передаваемыми адаптеру для поиска предложений. Поскольку пользователь вводит слово, список предложений становится короче (в строках на стороне пользовательского интерфейса), поэтому, когда я хочу получить слово из ArrayList в индексе, выбранном пользователем, я получаю неправильное слово, потому что индексы не совпадают. Как я могу получить текст (String), который выбрал пользователь, без необходимости связываться с индексом? Вот мой код:как получить текст из autocomplete textview android

public class AutocompleteActivity extends BaseActivity { 

    private DBManager m_db; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.autocomplete); 

     m_db = new DBManager(this); 
     final ArrayList<String> words = m_db.selectAllWords(); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listitem, words); 

     AutoCompleteTextView tv = (AutoCompleteTextView)findViewById(R.id.autocomplete); 
     tv.setThreshold(1); 
     tv.setAdapter(adapter); 

     tv.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
       Log.i("SELECTED TEXT WAS------->", words.get(arg2)); 
      } 
     }); 
    } 
} 
+0

Спасибо за добавление этого фрагмента кода, это помогло тем, что заняло у меня почти 6 часов. +1 для этого – Android

+0

Код работал. Маленький наконечник для начинающих, таких как я. После вставки этого кода нажмите на поле и введите письмо, чтобы увидеть, как окно предложений опускается. Я вставил код, нажал на файл и подождал, пока появится окно предложений POPUP, которое никогда не откроется. Но есть метод showDialogBox() для отображения POPUP. – Pravin

ответ

36

arg0 быть вашим AdapterView и arg2 положение.

Вы пробовали:

arg0.getItemAtPosition(arg2); 
+0

Я ищу текст, который не выбран пользователем –

+0

arg3 - это идентификатор из базы данных. мы можем использовать его напрямую – Vijay

40

Да ... К сожалению, название параметров по методу onItemClick вы должны реализовать не так самоописания, но вот пример с именами, что они :

autoCompleteTextView.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) { 
     String selection = (String)parent.getItemAtPosition(position); 
     //TODO Do something with the selected text 
    } 
}); 
  • родителю AdapterView, где произошел щелчок.
  • В представлении пределов в AdapterView, что было нажат (это будет вид обеспечивается адаптера)
  • положения Положения точки зрения в адаптере
  • Идентификатора строки идентификатор элемента, который был нажат ,

Для получения дополнительной информации см: http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html

+0

Ваше предложение работает отлично, а не выбранные ответы. –

+0

Dud thanks. Это лучший ответ. –

8

Я думаю, что вы ищете это.

String s = this.mCountry.getEditableText().toString(); 

Где mCountry является AutoCompleteTextView.

this.mCountry = (AutoCompleteTextView) findViewById(R.id.autocomplete_country); 
    ArrayAdapter<String> adapterCountry = new ArrayAdapter<String>(this, R.layout.list_item, countries); 
    this.mCountry.setAdapter(adapterCountry); 

mCountry список стран, и я хотел, чтобы спасти страну, выбранный в SharedPreferences.

Надеюсь, это поможет.

3

попробовать это:

txtPurpose.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
           long arg3) { 
      Purpose selected = (Purpose) arg0.getAdapter().getItem(arg2); 
      txtPurpose.setTag(selected); 
     } 
    }); 
2

друг друга получения текста внушения, выбранного в AutoCompleteTextView является

@Override 
public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
{ 
    TextView txtvw=(TextView) view; 
    String str=txtvw.getText().toString(); 
    int index = contactNames.indexOf(str); 
} 
3

Самый простой из всех

Для Getting текст выбранного предложения в AutoCompleteTextView используйте это

 autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Log.e("========>>", autoCompleteTextView.getText().toString()); 
     } 
    }); 
1

Вот код, который поможет решить эту проблему.

private AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { 
     int index = (int) view.getTag(); 
     Object item = parent.getItemAtPosition(index); 
     if (item instanceof SearchItemShareConnectionDAO) { 
      SearchItemShareConnectionDAO dao = (SearchItemShareConnectionDAO) item; 

     } 
    } 
}; 

SetTag (Dao.getPosition) в методе getView() адаптера.

+0

вы r право. это даст нам конкретные данные. от тега вида :) –

0

Чтобы получить текст отображаемого элемента, выбранного пользователем

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    String selectedItemText = arg0.getItemAtPosition(arg2); 
    Log.i("myTag", "SELECTED TEXT WAS["+selectedItemText+"]); 
} 

После наилучшей практики, пожалуйста, используйте некоторую форму описательной номенклатуры для переменных, ваш код будет иметь больше смысла:

public void onItemClick(AdapterView<?> adapterViewIn, View viewIn, int selectedItemIndexIn, long id)