应用程序冻结自动完成textChanged

时间:2017-01-31 15:14:55

标签: java android autocomplete autocompletetextview

我能够获得AutoCompleteTextview的用户输入的第一个和最后一个文本但是 当我在AutocompleteTextView textChanged方法上设置构建器方法时,我的应用程序冻结。 我感谢所提供的任何努力。

@Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            if(s.length()>0) {
                String selectedText = s.toString();
                int end = selectedText.length()+start;
                SpannableStringBuilder builder = new SpannableStringBuilder(selectedText);
                builder.setSpan(android.graphics.Typeface.BOLD, start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                Log.i("builderText", " "+builder);
                autoCompleteTextView.setText(builder);

            }

        }

2 个答案:

答案 0 :(得分:1)

我遇到了类似的问题并修复了它。我有一个名为“OnLayoutChage”的事件并添加了 .SetSelection(searchText.Text.Length, searchText.Text.Length); 来解决这个问题。

"searchText" 是 AutoCompleteTextView(它是一种 EditText 类型)

public void OnLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
     searchText.DropDownAnchor = Resource.Id.appbar;
     searchText.DropDownWidth = ViewGroup.LayoutParams.MatchParent;
     .......
     searchText.SetSelection(searchText.Text.Length, searchText.Text.Length);
}

答案 1 :(得分:0)

问题在于您尝试在可能的空字符串上获取字符的索引。这就是为什么你在这里-1

的原因
String startText = autoCompleteTextView.getText().toString();
int start = startText.indexOf(0);
int end = startText.indexOf(1);

您可能希望在侦听器中添加该语句,例如autoCompleteTextView.addTextChangedListener()并在那里处理实际文本更改的位置。