Ho fornito una visualizzazione del testo a completamento automatico per mostrare suggerimenti all'utente. Basato sull'elemento selezionato dall'utente, ottengo l'id dell'elemento e lo utilizzo nel lato del database . Ora il mio problema è di limitare l'utente a fare la selezione solo da textview a completamento automatico (cioè, l'utente non deve inserire il proprio testo). È un requisito del cliente. Come fare questo?Android: Limita l'utente alla selezione dalla sola visualizzazione del testo del completamento automatico
risposta
Ecco una soluzione abbastanza semplice:
È possibile creare una variabile per memorizzare il valore selezionato impostando setOnItemClickListener
in il tuo AutoCompleteTextView
. Quindi puoi null
che valore ogni volta che un utente digita sul campo aggiungendo un TextWatcher
ad esso. Infine, è possibile convalidare la variabile non è nulla prima di continuare.
String my_var; //keep track!
AutoCompleteTextView tv = (AutoCompleteTextView) layout.findViewById(R.id.tv);
tv.setAdapter(my_adapter);
tv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
my_var = my_adapter.getItem(position).toString();
}
});
/**
* Unset the var whenever the user types. Validation will
* then fail. This is how we enforce selecting from the list.
*/
tv.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
my_var = null;
}
@Override
public void afterTextChanged(Editable s) {}
});
ma se l'utente ha digitato il valore che appare nell'elenco, 'my_var' non dovrebbe essere nullo! – dvrm
@dvrm, quindi è necessario cercare nell'adattatore il testo inserito dall'utente e selezionare il valore dall'adattatore su ogni onChanged. Quindi, diciamo che l'utente sta digitando "nome" nell'actv, quindi cercherai "n", "na", "nam", "nome" e quando ottieni una corrispondenza, scegli quel valore. in questo modo l'elemento nella lista sarà scelto sia che lo facciano clic o meno, purché il testo corrisponda a – regretoverflow
brillante applicazione della mente. Grazie. –
Ok presumo che si desideri limitare l'input dell'utente ai testi contenuti nell'elenco di elementi elencati nella casella dei suggerimenti.
Per esempio se si dispone di:
- Uno
- Due
- Tre
allora l'utente potrebbe digitare solo per il primo carattere "O" e "T". E così via secondo il testo inserito prima.
per raggiungere questo obiettivo è possibile utilizzare le setFilters metodo di TextView:
editBox = (TextView) findViewById(R.id.editBox);
editBox.setFilters(getFilters());
editBox.addTextChangedListener(this);
editBox.setOnFocusChangeListener(this);
Inoltre si sarebbe probabilmente necessario il cambiamento testo ascoltatore e attenzione ascoltatore reagire e aggiornare l'elenco filtrato quando viene inserito un nuovo carattere ... oltre ad aggiornare il filtro.
Ecco un esempio del filtro di numero decimale che ho usato su un progetto:
protected InputFilter[] getFilters()
{
InputFilter[] filters = new InputFilter[1];
filters[0] = new InputFilter()
{
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
{
// limit input to digits and decimal/thousand separator only
// in case thousand separator is pressed, change it to decimal
// separator instead
String output = "";
if (number.isFocused())
{
for (int i = start; i < end; i++)
{
char c = source.charAt(i);
if (isDecimalOrThousandSeparator(c))
{
output = output + Character.toString(decimalSeparator);
}
else if (Character.isDigit(c))
{
output = output + Character.toString(c);
}
}
return output == "" ? null : output;
}
return null;
}
};
return filters;
}
mi è capitato di avere bisogno di un tale requisito per un progetto cui sto lavorando, e ho pensato io condividere voi ragazzi il modo in cui ho implementato il richiesto.
Ho aggiunto un listener di cambiamento di messa a fuoco per la visualizzazione del testo a completamento automatico e controllato quando l'utente ha attivato lo stato attivo di messa a fuoco dal completamento automatico e ha gestito la situazione in avanti.
autoTextViewCountry.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
if(!b) {
// on focus off
String str = autoTextViewCountry.getText().toString();
ListAdapter listAdapter = autoTextViewCountry.getAdapter();
for(int i = 0; i < listAdapter.getCount(); i++) {
String temp = listAdapter.getItem(i).toString();
if(str.compareTo(temp) == 0) {
return;
}
}
autoTextViewCountry.setText("");
}
}
});
Quindi il mio attuazione è: se il testo digitato non esiste l'adattatore matrice poi a fuoco cambiato svuotare la visualizzazione del testo, e più tardi, quando continuando a prossima fase di registrazione per esempio, controllare se questo punto di vista il testo è vuoto o no
Spero che questo approccio aiuti qualcuno.
Felice codifica.
NiceAutoCompleteTextView vi darà la possibilità di verificare se una selezione è stata fatta dal pop-up menu a discesa, invocando isSelectionFromPopup()
- 1. Selezione del testo Android in Webview
- 2. jQuery evento selezione completamento automatico
- 3. personalizzato il suggerimento Elenco di completamento automatico del testo Visualizza
- 4. Testo di completamento automatico in Android?
- 5. Impedisci il completamento automatico del testo in WPF ComboBox?
- 6. Completamento automatico del testo normale in Atom (Github)
- 7. Implementazione del completamento automatico in iOS
- 8. trascina la visualizzazione del testo in Android
- 9. Completamento automatico del codice C in Eclipse
- 10. Completamento automatico jQuery UI: riferimento alla ul
- 11. Android: suggerimento richiesto per la visualizzazione del riciclatore di aggiornamento sull'elemento selezionato dalla casella di selezione
- 12. Tracciamento del testo selezionato nella visualizzazione Web Android
- 13. Completamento automatico del codice su Eclipse
- 14. Completamento automatico del plug-in IntelliJ
- 15. Visualizzazione del contenuto del testo nell'app HTML5
- 16. Limita larghezza del bordo alla larghezza del testo in un elemento di blocco
- 17. Completamento automatico Emacs senza visualizzazione dei risultati
- 18. jQueryUI completamento automatico - dati personalizzati e visualizzazione
- 19. Selezione del testo Evidenziazione eccessiva
- 20. Disattiva la selezione del testo nell'area testo
- 21. Come aggiungere onclicklistener alla visualizzazione del testo generata dinamicamente?
- 22. Selezione del testo Modifica Ancore mancanti
- 23. Android - visualizzazione del testo al centro della barra di avanzamento
- 24. come ottenere il testo da textview con completamento automatico android
- 25. Android Completamento automatico TextView drop down width
- 26. WPF: Troncamento automatico del testo in TextBlock
- 27. Completamento automatico automatico in TextMate
- 28. IllegalArgumentException durante la selezione del testo in Android TextView
- 29. È possibile disabilitare il completamento automatico del browser Web?
- 30. Android Studio collegamento automatico di completamento automatico non funzionante
La tua domanda non è chiara. Quale selezione vuoi limitare/dove altro possono gli utenti effettuare una selezione? – stoilkov
Stai tentando di limitare l'utente a modificare la visualizzazione testo ... in modo che possa selezionare solo uno degli elementi nella selezione del completamento automatico? – Drejc
@Drejc sì questo è quello che ho richiesto –