Реализация функции фрагмента SQLite не форматирует текст как HTML в TextView

Я реализую функцию поиска, используя SQLite FULL TEXT SEARCH. Я хочу представить результаты жирным текстом запроса, как это делает поиск Google! Я реализовал код, подобный приведенному ниже, но он отображает простой текст без какого-либо форматирования HTML, хотя привязывает представление к адаптеру курсора и устанавливает форматирование текста TextView, Я не могу понять, где я не прав в коде? Любая помощь, пожалуйста!

Моя функция поиска в классе 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;

}

И моя функция Показать результаты для отображения результатов пользователям в классе активности:

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);

1 ответ

Решение

Текстовое представление отображает неформатированный текст, потому что код говорит ему показать содержимое столбца KEY_TEXT_en, который является неформатированным текстом.

Чтобы отобразить результат функции сниппета, присвойте ему имя:

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

и используйте этот столбец для просмотра текста.

Другие вопросы по тегам