2012-03-13 22 views
6

Disculpe si esto es obvio para todos los demás, pero tengo una pequeña dificultad para entender cómo mostrar html dentro de mi lista de lista.Android Mostrar HTML en un ListView

Mi lista de vista está declarada.

ListView lv1 = (ListView) findViewById(R.id.ListView01); 

Yo lo llené (no se muestra) y luego configuré mi lista aquí con un ArrayAdapter.

lv1.setAdapter(new ArrayAdapter<String>(SearchByFood.this, R.layout.new_list_view, foods)); 

Más abajo, creo una nueva matriz de cadenas que quieren tener etiquetas en negrita. Luego agregar esta nueva matriz (llamada arr_sort) a la ArrayAdapter insdie un método OnTextChanged().

lv1.setAdapter(new ArrayAdapter<String>(SearchByFood.this, R.layout.new_list_view, arr_sort)); 

Así que ahora que mi nueva matriz de cadenas tiene < b> en ella. ¿Cómo hago que mi lista de lista muestre el texto en negrita?

Aquí es mi new_list_view

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textColor="@color/grey2" 
    android:textSize="20sp" 
    android:gravity="center_vertical" 
    android:paddingLeft="6dip" 
    android:minHeight="40dip" 
/> 

Y aquí es mi parte ListView en mi diseño principal.

 <ListView 
     android:id="@+id/ListView01" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/rounded_corners_green" 
     android:cacheColorHint="#00000000" 
     android:divider="@color/green6" 
     android:dividerHeight="1px" 
     android:fastScrollEnabled="true" > 
    </ListView> 

Cualquier ayuda sería muy apreciada.

Respuesta

3

anulación del adaptador y haga lo siguiente:

ArrayAdapter<String> adapter= ArrayAdapter<String>(SearchByFood.this, R.layout.new_list_view, arr_sort){ 
    public Object getItem(int position) 
    { 
      return Html.fromHtml(arr_sort.get(position)); 
    } 
}; 
+0

El hecho de que esta es la respuesta aceptada es confuso. La respuesta de OP, S.A. Jay funcionó para mí. –

+0

No funciona para mí. – EliaszKubala

1

Si tiene la posibilidad de cargar sus textos desde strings.xml, agregar la etiqueta allí automáticamente audaz su texto. Sin embargo, si sus textos son dinámicos, se tiene que crear un custom adapter, y en ella para establecer el texto utilizando el método getItem textView.setText(Html.fromHtml(yourText));

2

Si todo lo que querido es para mostrar un texto en partes del texto debe estar en negrita, todo lo que necesita es uno de Vista de texto, y el texto con formato correcto (con <b> añadido) y hacer lo siguiente:

textview.setText(Html.fromHtml(text)); 

Para obtener más información sobre lo que TextView + Html puede admitir, consulte here

15

Ok, entonces Jitendra Sharma tuvo la idea correcta para mi caso, pero tuve que anular el método getView. O al menos eso es lo que funcionó para mí. Luego, en el método getView, pude configurar mi texto para que se procesara en html.

  ArrayAdapter<String> adapter = new ArrayAdapter<String>(SearchByFood.this, R.layout.new_list_view, arr_sort) 
      { 
       @Override 
       public View getView(int position, View convertView, ViewGroup parent) 
       { 
        View row; 

        if (null == convertView) { 
        row = mInflater.inflate(R.layout.new_list_view, null); 
        } else { 
        row = convertView; 
        } 

        TextView tv = (TextView) row.findViewById(android.R.id.text1); 
        tv.setText(Html.fromHtml(getItem(position))); 
        //tv.setText(getItem(position)); 

        return row; 
       } 

      }; 
      lv1.setAdapter(adapter); 
+0

Parece que es lo correcto, pero Android no puede encontrar "mInflater", ¿alguna idea de lo que debería hacer? – Fundhor

+0

LayoutInflater mInflater = (LayoutInflater) Activity.this.getSystemService (Context.LAYOUT_INFLATER_SERVICE); Esto es lo que agregué para que esto funcione. Cambie la actividad a cualquiera que sea su nombre de actividad. – Gavin

0
ArrayAdapter<Spanned> listAdapter = new ArrayAdapter<Spanned>(MyActivity.this, R.layout.row); 
listAdapter.add(Html.fromHtml(htmlText)); 
listAdapter.add(Html.fromHtml(htmlText)); 
... 
-1

Esto también funciona y es Perphaps mucho más simple. En primer lugar, pasar los datos desde String [] para abarcado []

Spanned[] myhtmldata = new Spanned[mydata.length]; 
for(int i = 0 ; i < mydata.length; i++) { 
myhtmldata[i] = Html.fromHtml(mydata[i]); 
} 

declarará la ArrayAdapter utilizando el parámetro CharSequence

ArrayAdapter<CharSequence> linksadapter = new ArrayAdapter<CharSequence>(getActivity(), R.layout.list_item, R.id.textview, myhtmldata);   
setListAdapter(linksadapter); 

tomado de here

2

Si está utilizando un SimpleAdapter, aquí es el código que habilita HTML en un TextView.

adapter.setViewBinder(new SimpleAdapter.ViewBinder() { 
    public boolean setViewValue(View view, Object data, String textRepresentation) { 
     if (data instanceof Spanned && view instanceof TextView) { 
      ((TextView) view).setText((Spanned) data); 
     } else { 
      ((TextView) view).setText(Html.fromHtml(String.valueOf(data))); 
     } 
     return true; 
     } 
    } 
); 

Ref: [Link] (http://android.jreactor.com/2012/07/17/simpleadapter-spanned-html-fromhtml/)

0

si utiliza ksoap de datos HTML desde cualquier motor de base de

yourVariable=String.valueOf(Html.fromHtml(ic.getProperty(0).toString()))