2011-01-27 13 views
27

Mam AutoCompleteTextView w mojej aplikacji, która działa. Udało mi się utworzyć narzędzie onClickItemListener. Pytanie brzmi, jak pobrać tekst wybrany przez użytkownika. I to jest rzeczą: mam ArrayList z słowami przekazywanymi do adaptera w celu wyszukania sugestii. Gdy użytkownik wpisuje słowo, lista sugestii staje się krótsza (w wierszach po stronie interfejsu użytkownika), więc gdy chcę uzyskać słowo z tablicy ArrayList w indeksie, użytkownik wybrał niewłaściwe słowo, ponieważ indeksy się nie zgadzają. W jaki sposób mogę uzyskać tekst (String), który użytkownik wybrał, bez konieczności naruszania indeksu? Oto mój kod:jak uzyskać tekst z autouzupełniania 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

Dzięki za dodanie tego fragmentu kodu, pomogło mi to, co zajęło mi prawie 6 godzin. +1 dla tego kodu działa – Android

+0

. Mała wskazówka dla początkujących, takich jak ja. Po wklejeniu tego kodu kliknij na pole i wpisz literę, aby pole propozycji pojawiło się na dole. Wkleiłem kod, kliknąłem na pole i czekałem na pole sugestii do POPUP, które nigdy się nie otworzy. Ale istnieje metoda showDialogBox() do wyświetlania POPUP. – Pravin

Odpowiedz

36

arg0 jest swoim AdapterView i arg2 pozycja.

Czy próbowałeś:

arg0.getItemAtPosition(arg2); 
+0

Szukam tekstu, który został wybrany przez użytkownika, nie id –

+0

arg3 jest id z bazy danych. możemy go użyć bezpośrednio – Vijay

40

Tak ... niestety nazwy parametrów w metodzie onItemClick należy realizować nie są tak samo-opisowy, ale tutaj jest przykład z nazwiskami, jakie są :

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 
    } 
}); 
  • parent AdapterView gdzie kliknięcie stało.
  • pogląd widok ciągu z AdapterView który został kliknięty (będzie to widok dostarczane przez adapter )
  • Stanowisko położenie widoku w adapterze
  • id id wiersz elementu, który został kliknięty .

Aby uzyskać więcej informacji zobacz: http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html

+0

Twoja sugestia działa poprawnie zamiast wybranych odpowiedzi. –

+0

Dziękuję. To jest najlepsza odpowiedź. –

8

myślę, czego szukasz, jest to.

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

Gdzie mCountry jest 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 lista krajów, a ja chciałem uratować kraj wybrany w SharedPreferences.

Mam nadzieję, że to pomoże.

3

spróbuj tego:

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

siebie na uzyskanie tekstu sugestią wybranego w AutoCompleteTextView jest

@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

Najprostsza wszystkim

na uzyskanie tekstu wybranego sugestię w AutoCompleteTextView użyj tego

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

Oto kod, który rozwiąże problem.

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) w metodzie getView() adaptera.

+0

r prawo. to da nam konkretne dane. z Tag of view :) –

0

Aby uzyskać tekst wyświetlanego elementu wybranego przez użytkownika

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

następujące wskazówki, proszę użyć jakiejś formy nomenklatury opisowe dla zmiennych, Twój kod będzie bardziej sensowne:

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