我有一个ListView,并想从中搜索文本。我已经成功实现了搜索功能,但现在我想在ListView中搜索项目并突出显示搜索到的文本。这是我在ListViewAdapter中的过滤函数:
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
worldpopulationlist.clear();
if (charText.length() == 0) {
worldpopulationlist.addAll(arraylist);
}
else
{
for (WorldPopulation wp : arraylist)
{
// Find charText in wp
int startPos = wp.getCountry().toLowerCase(
Locale.getDefault()).indexOf(charText.toLowerCase(Locale.getDefault()));
int endPos = startPos + charText.length();
if (startPos != -1)
{
Spannable spannable = new SpannableString(wp.getCountry());
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);
// countryTextView.setText(spannable);
worldpopulationlist.add(wp);
}
}
}
notifyDataSetChanged();
}
我已经搜索了,知道 Spannable 用于此目的,但它无法工作。请帮助我,并告诉我是否需要其他相关代码。
编辑:
我所遵循的教程来自这里。我使用了相同的代码,只做了一些小改动。我只想在列表视图中(例如本例中的一个国家)突出显示搜索到的文本。
spannable
设置到任何视图中。它只是被创建了,但没有在任何地方使用。 - Juanjo Vegafinal ViewHolder holder = new ViewHolder(); View view = inflater.inflate(R.layout.listview_item, null); holder.country = (TextView) view.findViewById(R.id.country); holder.country.setText(spannable);
- Sibtain