Pergunta

Eu tenho o seguinte código:

@SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            data = (ArrayList<SetRows>)results.values;
            EditText etS = (EditText) ((Activity)context).findViewById(R.id.etSearch);
            if (data.isEmpty()) {
                etS.setTextColor(Color.parseColor("#FFCC0000"));
                Vibrator vb = (Vibrator) ((Activity)context).getSystemService(Context.VIBRATOR_SERVICE);
                // Vibrate for 100 milliseconds
                vb.vibrate(100);
            }
            if (!data.isEmpty()) {
                etS.setTextColor(Color.parseColor("#FF27497B"));
            }
            notifyDataSetChanged();
            clear();
            for(int i = 0, l = data.size(); i < l; i++)
                add(data.get(i));
            notifyDataSetInvalidated();
        }

Ele vibra toda vez que insiro um caractere que não corresponde a nada no ListView e está funcionando bem.O problema é que ele também vibra quando pressiono a tecla backspace/delete.Qual não é a intenção.

Como faço para permitir a vibração ao inserir a letra errada, mas não ao pressionar a tecla backspace/del.Eu tentei o onTextChanged mas isso não estava funcionando.

Foi útil?

Solução

Eu manteria o comprimento do texto inserido.Ao pressionar backspace/delete, você basicamente apaga o último caractere (o comprimento está diminuindo), então compare o novo comprimento com o antigo.Pseudo-código:

if newLength > oldLength then vibrate

else don't vibrate 

Se newLength for mais curto, significa que você pressionou a tecla backspace/delete e excluiu um caractere, portanto não vibre.Você pode fazer isso em onTextChanged ou onde fizer sentido para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top