android - 突出显示 arrayAdapter ListView 中的搜索文本
问题描述
是否有任何突出显示我正在使用的搜索文本arrayAdapter
ListView
这是我的代码
private TextWatcher filterTextWatcher = new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
adapter.getFilter().filter(s);
}
};
protected void onPostExecute(final List<Site> sites) {
progressBar.hide();
adapter = new ArrayAdapter(context, R.layout.alert_dialog_single_choice_list_item,sites);
list.setAdapter(adapter);
list.setItemChecked(selectedSite, true);
list.setSelection(selectedSite);
filterText.setVisibility(View.VISIBLE);
list.setOnItemClickListener(new AdapterView.OnItemClickListener()
}
这是 onViewCreated 方法
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
filterText = (EditText) view.findViewById(R.id.et_search_state);
filterText.addTextChangedListener(filterTextWatcher);
list = (ListView) view.findViewById(R.id.lv_state);
progressBar = view.findViewById(R.id.progressBar);
final ImageButton btnClear = view.findViewById(R.id.btn_clear);
btnClear.setOnClickListener(this);
new BindDataAsync().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
filterText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.length() > 0) {
btnClear.setVisibility(View.VISIBLE);
} else {
btnClear.setVisibility(View.INVISIBLE);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
我已经检查过了,但这里他们使用的是自定义adapter
;
解决方案
试试下面:
添加一个全局字段,
String mSearchText = "";
在调用过滤器(
adapter.getFilter().filter(s);
)之前,添加mSearchText = s.toString();
改变
adapter = new ArrayAdapter(context, R.layout.alert_dialog_single_choice_list_item,sites);
至
adapter = new ArrayAdapter(context, R.layout.alert_dialog_single_choice_list_item,sites){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView text;
text = (TextView)super.getView(position, convertView, parent);
String fullText = getItem(position);
// highlight search text
if (mSearchText != null && !mSearchText.isEmpty()) {
int startPos = fullText.toLowerCase(Locale.US).indexOf(mSearchText.toLowerCase(Locale.US));
int endPos = startPos + mSearchText.length();
if (startPos != -1) {
Spannable spannable = new SpannableString(fullText);
ColorStateList blueColor = new ColorStateList(new int[][]{new int[]{}}, new int[]{Color.BLUE});
TextAppearanceSpan highlightSpan = new TextAppearanceSpan(null, Typeface.BOLD, -1, blueColor, null);
spannable.setSpan(highlightSpan, startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
text.setText(spannable);
} else {
text.setText(fullText);
}
} else {
text.setText(fullText);
}
return text;
}
};
希望有帮助!
推荐阅读
- html - 如何在 HTML 表格单元格内制作一个完美的彩色圆圈,该圆圈保持圆形并随表格缩放?
- python - 我如何调用我需要用于 DOE 的新包,尽管模块的错误未找到,尽管它位于正确的文件路径中?
- ruby-on-rails - 如何在rails中获取图像文件夹ruby的长度
- javascript - 如何在vue中通过另一个数组过滤数组
- linux - 系统和用户的性能统计时间已过
- python - 使一组图像的亮度相同
- flutter - 是否可以在飞镖中使用 getter 作为函数参数?
- python - 我的 Mac 中 Ananconda 的 Jupyter 启动错误
- python - 用python下载pdf
- r - ggplot2 的时间序列美学