Как отобразить HTML в ListView (SimpleArapter / setViewBinder) - PullRequest
0 голосов
/ 01 августа 2020

Как отобразить HTML текст в listView. Я не понимаю ... listView работает без ошибок (отображает текст и числа), текст с разметкой HTML отображается как - строка.

Я хочу отобразить математическую или химическую фолмулу:

X <sup><small>n</small> </sup> + Y <sup>

Android Отображение HTML в ListView - ответы отсюда у меня не работают.

Может, я неправильно определяю массив?

В чем моя ошибка? (Я новичок ie)

Ниже мой код:

  <string-array name="catNames">
        <item><b>Name 1</b></item>
        <item><big>Name 1<small>Name 1</small>Name 1<small>Name 1</small></big></item>
        <item><p><b>Lorem ipsum dolor sit amet</b></p></item>
    </string-array>
    
//
          ListView listView = (ListView) findViewById(R.id.listView);
            String[] catNames = getResources().getStringArray(R.array.catNames);
            String[] catNames2 = getResources().getStringArray(R.array.catNames2);
            String[] catNames3 = getResources().getStringArray(R.array.catNames3);
            int[] catNames4 = getResources().getIntArray(R.array.catNames4);
            //
            ArrayList<HashMap<String, Object>> data = new ArrayList<>(catNames.length);
            HashMap<String, Object> map;
            //
                for (int i = 0; i < catNames3.length; i++) {
                map = new HashMap<>();
                map.put("CatName", catNames[i]);
                map.put("CatName2", catNames2[i]);
                map.put("CatName3", catNames3[i]);
                map.put("CatName4", catNames4[i]);
                data.add(map);
            }
            //
            String[] from = {"CatName", "CatName2", "CatName3", "CatName4"};
            int[] to = {R.id.textView1, R.id.textView2, R.id.textView3, R.id.textView4,};
            //
            SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.list_item, from, to);
                adapter.setViewBinder(new TableActivity.MyViewBinder());
                listView.setAdapter(adapter);
    /////////////////////////////////////////////////////
        class MyViewBinder implements SimpleAdapter.ViewBinder {
            @Override
            public boolean setViewValue(View view, Object data, String textRepresentation) {
                int red = getResources().getColor(R.color.colorPrimary);
                //
                int i = 0;
                switch (view.getId()) {
                    // LinearLayout
                    case R.id.textView3:
                        view.setBackgroundColor(red);
                        //((TextView)view).setText(Html.fromHtml(data + " " + textRepresentation));
                        ((TextView)view).setText(Html.fromHtml(textRepresentation));
                        return true;
                }
                return false;
            }
        }

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Спасибо за помощь!

Ответ: Добавил:

<! [CDATA []]>

Пример:

 <string-array name = "catNames">
     <item><! [CDATA [X<sup> <small> n </small> </sup> + Y <sup>]] </item>
 </string-array>

Вывод:

((TextView) view) .setText (Html.fromHtml (textRepresentation));

У меня это сработало. ListView теперь отображает HTML строк в TextView.

0 голосов
/ 02 августа 2020

Предполагая, что textRepresentation содержит текст HTML, вам нужно изменить строку ((TextView)view).setText(Html.fromHtml(textRepresentation)); на ((TextView)view).setText(Html.fromHtml(textRepresentation), BufferType.SPANNABLE);. Это указывает TextView обрабатывать значение как строку Spannable и правильно отображает HTML.

...