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));
            }
        });
    }
}
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top