ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

android-SQLite代码段功能实现未在TextView中将文本格式设置为HTML

2019-10-12 23:27:01  阅读:280  来源: 互联网

标签:android sqlite simplecursoradapter android-viewbinder full-text-search


我正在使用SQLite全文搜索实现搜索功能.我想像Google搜索一样用粗体查询文本显示结果!我已经实现了类似下面的代码,但是它通过将视图绑定到光标适配器并设置TextView的文本格式来显示纯文本,而没有任何HTML格式.我无法弄清楚代码中的错误之处?任何帮助请!

我在DatabaseAdapter类中的搜索功能是:

public Cursor searchText(String inputText) throws SQLException 
{
    Log.w(TAG, inputText);
    String query = "SELECT "+
    "docid as _id," + 
    KEY_NAME + "," +
    KEY_INDEX + "," +
    KEY_TEXT_en + "," +
    KEY_TEXT_ur +  "," +
    KEY_TRANS_ur +  "," +
    "hex(matchinfo("+FTS_VIRTUAL_TABLE+")) AS "+KEY_OCCURRENCES+"," +
    "snippet("+FTS_VIRTUAL_TABLE+",'<b>','</b>')" +
    " from " + FTS_VIRTUAL_TABLE +
    " where ("+  FTS_VIRTUAL_TABLE +") MATCH '" + "\""+"*"+inputText+"\"*"+" ';";

    Log.w(TAG, query);
    Cursor mCursor = mDb.rawQuery(query,null);

    if (mCursor != null) 
    {

        mCursor.moveToFirst();
    }
    return mCursor;

}

在活动类中向用户显示结果的show Results函数是:

public void showResults(String query) 
{

    Cursor cursor = mDbHelper.searchText((query != null ? query.toString() : "@@@@"));

    if (cursor == null)
    {
    }
    else 
    {
        // Specify the columns we want to display in the result
        String[] from = new String[] 
                {
                    DbAdapter.KEY_TEXT_en,
                    DbAdapter.KEY_INDEX,
                    DbAdapter.KEY_NAME,
                };   
        // Specify the Corresponding layout elements where we want the columns to go
        int[] to = new int[] 
                {
                    R.id.TextEnTv,
                    R.id.IndexTv,
                    R.id.NameTv
                };
 final SimpleCursorAdapter cursorAdapter = new simpleCursorAdapter(this,R.layout.search_results, cursor, from, to);
        cursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
            public boolean setViewValue(View view,Cursor cursor, int columnIndex) {
                   if (columnIndex == cursor.getColumnIndex(DbAdapter.KEY_TEXT_en)) {

                        TextView myView = (TextView) findViewById(R.id.TextEnTv);
                        myView.setText(Html.fromHtml(cursor.getString(cursor.getColumnIndex(DbAdapter.KEY_TEXT_en))));

                        return(true);
                      }

                      return(false);
                    }
                  });
        mListView.setAdapter(cursorAdapter);

解决方法:

文本视图显示未格式化的文本,因为代码告诉它显示KEY_TEXT_en列的内容,即未格式化的文本.

要显示摘录功能的结果,请为其命名:

SELECT ... snippet(...) AS snippet ...

并将该列用于文本视图.

标签:android,sqlite,simplecursoradapter,android-viewbinder,full-text-search
来源: https://codeday.me/bug/20191012/1903869.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有