当输入文本与游标字符串匹配时,如何在listview-cursoradapter中更改textview背景颜色?

时间:2015-06-02 11:28:18

标签: android listview

我正在尝试在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();
}

2 个答案:

答案 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