Wie bekomme ich Text von AutoCompletEtextView?
-
26-10-2019 - |
Frage
ich habe ein AutoCompleteTextView
in meiner App, die funktioniert. Ich habe erfolgreich eine geschaffen onClickItemListener
. Die Frage ist, wie der vom Benutzer ausgewählte Text erfasst wird.
Und das ist die Sache: Ich habe eine ArrayList
Mit Worten, die an die übergeben werden Adapter
nach Vorschlägen zu suchen. Da der Benutzer ein Wort eingibt ArrayList
Im Index des Benutzers erhalte ich das falsche Wort, da die Indizes nicht übereinstimmen.
Wie kann ich den Text bekommen (String
) Der Benutzer hat sich entschieden, ohne sich mit dem Index anlegen zu müssen?
Hier ist mein Code:
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));
}
});
}
}
Lösung
arg0
sein AdapterView
und arg2
die Position.
Hast du es versucht:
arg0.getItemAtPosition(arg2);
Andere Tipps
Ja ... leider sind der Name der Parameter der Onitemclick-Methode, die Sie implementieren müssen, nicht so selbstbeschreibend, aber hier ist ein Beispiel mit den Namen dessen, was sie sind:
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
}
});
- übertreffen die AdapterView, wo der Klick passiert ist.
- Zeigen Sie die Ansicht in der angeklickten AdapterView an (dies ist eine vom Adapter bereitgestellte Ansicht).
- Positionieren Sie die Position der Ansicht im Adapter
- ID die Zeilen -ID des geklickten Elements.
Weitere Informationen finden Sie unter: http://developer.android.com/reference/android/widget/adapterview.onitemclicklistener.html
Ich denke, was Sie suchen, ist das.
String s = this.mCountry.getEditableText().toString();
Wo mCountry
ist der 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
ist die Liste der Länder, und ich wollte das ausgewählte Land retten SharedPreferences
.
Hoffe das hilft.
Einfachste von allen
Um einen Text des ausgewählten Vorschlags in AutoCompletEtextView zu erhalten, verwenden Sie dies
autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.e("========>>", autoCompleteTextView.getText().toString());
}
});
Versuche dies:
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);
}
});
Einander, wenn Text des Vorschlags ausgewählt wird AutoCompleteTextView
ist
@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);
}
Hier ist der Code, der das Problem lösen wird.
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) in GetView () -Methode des Adapters.
Um den Text des angezeigten Elements vom Benutzer ausgewählt zu haben
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
String selectedItemText = arg0.getItemAtPosition(arg2);
Log.i("myTag", "SELECTED TEXT WAS["+selectedItemText+"]);
}
Nach den Best Practices verwenden Sie bitte eine Form der beschreibenden Nomenklatur für Ihre Variablen, Ihr Code wird sinnvoller:
public void onItemClick(AdapterView<?> adapterViewIn, View viewIn, int selectedItemIndexIn, long id)
Es gibt auch eine Möglichkeit, Gegenstände außerhalb der zu bekommen onItemClick
:
int index = tv.getListSelection();
if (index != ListView.INVALID_POSITION) {
Object item = tv.getAdapter().getItem(index);
}
Passen Sie vor, dass int getListSelection()
kann zurückkehren ListView.INVALID_POSITION
Wenn es keine Dropdown gibt oder keine Auswahl gibt.