use the efficient list adapter

And also you can use the TwoLineListitem....

On Wed, Jan 14, 2009 at 2:23 PM, Mariano Kamp <mariano.k...@gmail.com>wrote:

> *bump* ;-)
>
>
> On Sun, Jan 11, 2009 at 7:10 PM, Mariano Kamp <mariano.k...@gmail.com>wrote:
>
>> Hi,
>>   I have a performance problem in a ListView. The problem seems to be that
>> it takes too long to setup each individual row. It scrolls very, very
>> painfully slow, because of that.
>>
>>   The actual code renders an Entry differently depending on the read state
>> and if it is changed. When not using this code and just plainly called
>> setText() on the TextViews it is reasonable fast.  Also the content is HTML.
>>
>>   Am I doing something terribly wrong here?
>>
>>
>> <?xml version="1.0" encoding="utf-8"?>
>> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android
>> "
>>  android:layout_width="fill_parent" android:layout_height="wrap_content">
>>
>> <TextView android:id="@+id/feed_title" android:layout_width="fill_parent"
>>  android:layout_height="wrap_content" android:textSize="11sp"
>>  android:paddingTop="3px" />
>>  <TextView android:id="@+id/entry_title" android:layout_width=
>> "fill_parent"
>>  android:layout_height="wrap_content" android:layout_below=
>> "@id/feed_title"
>>  android:textSize="15sp" android:paddingBottom="3px" />
>> </RelativeLayout>
>>
>> class EntryListAdapter extends BaseAdapter {
>>
>>  [..]
>>
>> public View getView(int position, View convertView, ViewGroup parent) {
>>  View rowView = convertView != null ? convertView : activity
>>  .findViewById(R.layout.entry_row);
>>
>>  if (rowView == null)
>> rowView = inflater.inflate(R.layout.entry_row, parent, false);
>>
>> Entry entry = entries.get(position);
>>  --> slow version
>> EntryViewHelper.populateEntryView(rowView, entry);
>>  <--
>>              -- OR --
>>                  --> (somewhat) fast version
>>  TextView entryTitleView = (TextView) rowView.findViewById(R.id.
>> entry_title);
>>  TextView feedTitleView = (TextView) rowView.findViewById(R.id.feed_title
>> );
>>
>>
>>  feedTitleView.setText(entry.getFeedTitle());
>> entryTitleView.setText(entry.getTitle());
>>  <--
>> return rowView;
>>  }
>> }
>>
>> class EntryViewHelper {
>>  [..]
>>
>> static void populateEntryView(View view, Entry entry) {
>>
>> TextView entryTitleView = (TextView) view
>> .findViewById(R.id.entry_title);
>>  TextView feedTitleView = (TextView) view.findViewById(R.id.feed_title);
>>
>> feedTitleView.setText(U.renderTitleToSpannedString(
>> entry.getFeedTitle(), entry.getFeedTitleType()));
>>  entryTitleView.setText(U.renderTitleToSpannedString(entry.getTitle(),
>> entry.getTitleType()));
>>
>> int style = Typeface.NORMAL;
>>  if (!entry.isRead())
>> style |= Typeface.BOLD;
>>  if (entry.isReadStatePending())
>> style |= Typeface.ITALIC;
>>
>> entryTitleView.setText(U.renderTitleToSpannedString(entry.getTitle(),
>> entry
>>  .getTitleType()));
>> feedTitleView.setText(U.renderTitleToSpannedString(
>> entry.getFeedTitle(), entry.getFeedTitleType()));
>>
>> entryTitleView.setTypeface(Typeface.DEFAULT, style);
>>  }
>> }
>>
>> ..
>> import android.text.Html;
>> import android.text.Spanned;
>> import android.text.SpannedString;
>> ..
>> class U {
>> static Spanned renderTitleToSpannedString(String titleString,
>>  String titleType) {
>> Spanned title = null;
>>  if ("html".equals(titleType) || "xhtml".equals(titleType))
>>  title = Html.fromHtml(titleString);
>> else
>>  title = new SpannedString(titleString);
>> return title;
>>  }
>> }
>>
>>   Btw. I re-use the convert view etc. The performance degradation only
>> happens when I style the output.
>>
>> Cheers,
>> Mariano
>>
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to