我正在尝试在listview中实现搜索功能,例如在浏览器中搜索文本。
我成功搜索了游标数据中的输入词。但是,如何在找到匹配时更改相应单词的背景颜色?
这是bindview中的搜索代码
if (searchEnabled) {
cursor.moveToFirst();
while (cursor.moveToNext()) {
String cursorText = cursor.getString(indexMessage);
if (s.equals(searchText.toString())) {
//Change matched word's(textview) background color here
holder.textMessage.setBackgroundColor(Color.WHITE);
Log.i("Cursor Scan:", cursorText);
}
}
}
调用notifyDataSetChanged()
后,它只会更改最后一行textview的颜色。
我尝试通过从getChildAt()
获取listview文本并部分成功进行搜索,但是这个视图不一致,并且它在滚动时达到了原始状态(因为,这个列表视图从游标中膨胀)。
我尝试使用代码在listview文本中进行搜索:
private void updateListView(String textForSearch) {
LocalStoreDB localDB = new LocalStoreDB(getApplicationContext());
localMessageDB.openDB();
Cursor cursorForSearch = localDB.selectMessageDB();
cursorForSearch.moveToFirst();
while (cursorForSearch.moveToNext()) {
int position = cursorForSearch.getPosition();
View v = listview.getChildAt(position);
TextView tv = (TextView) v.findViewById(R.id.textMessage);
SpannableString cursorString = new SpannableString(tv.getText());
Pattern p = Pattern.compile(textForSearch);
Matcher m = p.matcher(cursorString);
while (m.find()) {
cursorString.setSpan(new BackgroundColorSpan(Color.WHITE),
m.start(), m.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Log.i("m.find()", cursorString.toString());
}
tv.setText(cursorString);
}
localDB.closeDB();
}
答案 0 :(得分:0)
您可以像这样设置文本视图的背景颜色
yourTextView.setBackgroundColor("0xff0000ff");
我看不到剩下的代码,但也许您必须在设置颜色后通知您所做的更改。
希望有所帮助
在你的情况下,我会尝试这样的事情:
TextView tv;
for(int i=0;i<listview.get.getCount();i++){
tv =(TextView) listview.getChildAt(i).findViewById(R.id.textMessage);
if(tv.getText().equalsIgnoreCase(searchstring)){
tv.setBackgroundColor("0xff0000ff");
}
else{
tv.setBackgroundColor("0xffffffff");
}
}
listViewAdapter.notifyDataSetChanged();
答案 1 :(得分:0)
对不起家伙迟到的回答。
我在另一个帖子中回答了这个问题。请点击此链接: https://stackoverflow.com/a/34287029/4688535