2012-03-13 40 views
6

Xin lỗi nếu điều này hiển nhiên đối với mọi người khác nhưng tôi gặp khó khăn nhỏ khi hiểu cách hiển thị html bên trong listview của tôi.HTML hiển thị của Android trong một ListView

Chế độ xem danh sách của tôi được khai báo.

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

Tôi điền nó (không được hiển thị) sau đó đặt danh sách xem của tôi tại đây với một ArrayAdapter.

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

Tiếp tục xuống tôi tạo ra một mảng mới của chuỗi mà tôi muốn có thẻ in đậm trong. Sau đó tôi thêm mảng mới này (được gọi là arr_sort) đến arrayadapter insdie một phương pháp OnTextChanged().

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

Vì vậy, bây giờ chuỗi mảng mới của tôi có < b> thẻ trong đó. Làm thế nào để làm cho listview của tôi hiển thị văn bản in đậm?

Đây là new_list_view tôi

<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" 
/> 

Và đây là một phần ListView của tôi trong cách bố trí chính của tôi.

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

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

3

override của Adaptor và làm như sau:

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

Thực tế rằng đây là câu trả lời được chấp nhận là khó hiểu. Câu trả lời của OP, S.A.Jay đã làm việc cho tôi. –

+0

Không hiệu quả với tôi. – EliaszKubala

1

Nếu bạn có khả năng tải văn bản của mình từ strings.xml, việc thêm thẻ sẽ tự động in đậm văn bản của bạn. Tuy nhiên Nếu văn bản của bạn là người năng động, bạn sẽ phải tạo ra một custom adapter, và ở trong đó để thiết lập các văn bản sử dụng phương pháp GetItem textView.setText(Html.fromHtml(yourText));

2

Nếu tất cả các bạn muốn là để hiển thị một số văn bản mà các bộ phận của văn bản nên được in đậm, tất cả bạn cần là một TextView và văn bản định dạng đúng (với <b> gia tăng) và làm như sau:

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

Để biết thêm thông tin về những gì TextView + Html có thể hỗ trợ, hãy xem here

15

Ok, vì vậy Jitendra Sharma đã có ý tưởng đúng cho kịch bản của tôi, nhưng tôi cần ghi đè phương thức getView. Hoặc ít nhất đó là những gì làm việc cho tôi. Sau đó, trong phương thức getView tôi đã có thể thiết lập văn bản của tôi để render trong 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

Nó có vẻ như là điều đúng để làm, nhưng android không thể tìm thấy "mInflater", bất kỳ ý tưởng về những gì tôi nên làm gì? – Fundhor

+0

LayoutInflater mInflater = (LayoutInflater) Activity.this.getSystemService (Context.LAYOUT_INFLATER_SERVICE); Đây là những gì tôi thêm vào để thực hiện công việc này. Thay đổi hoạt động thành bất kỳ tên hoạt động nào của bạn. – Gavin

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

này cũng làm việc và là perphaps đơn giản hơn rất nhiều. Thứ nhất, truyền dữ liệu của bạn từ String [] để Spanned []

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

Sau đó khai báo ArrayAdapter sử dụng tham số CharSequence

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

vay từ here

2

Nếu bạn đang sử dụng một SimpleAdapter, đây là mã cho phép HTML trên 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

nếu bạn sử dụng kSOAP cho dữ liệu html từ bất kỳ công cụ cơ sở dữ liệu

yourVariable=String.valueOf(Html.fromHtml(ic.getProperty(0).toString())) 
Các vấn đề liên quan