From dd9af58f157e5538129b549d4d5195a5bda005cc Mon Sep 17 00:00:00 2001 From: Daniel Uribe Ayvar Date: Tue, 15 Oct 2013 00:54:42 -0500 Subject: [PATCH] Suggest update to ArticleListAdapter Added a ViewHolder to ArticleListAdapter for keep reference from each list item view. This way you avoid frequent calls of findViewById() during listView scrolling and improvement the your app performance --- .../android/adapter/ArticleListAdapter.java | 71 +++++++++++-------- 1 file changed, 43 insertions(+), 28 deletions(-) diff --git a/src/com/nerdability/android/adapter/ArticleListAdapter.java b/src/com/nerdability/android/adapter/ArticleListAdapter.java index 80eb95f..739b4df 100644 --- a/src/com/nerdability/android/adapter/ArticleListAdapter.java +++ b/src/com/nerdability/android/adapter/ArticleListAdapter.java @@ -24,44 +24,59 @@ public class ArticleListAdapter extends ArrayAdapter
{ - + + private Activity myContext; + public ArticleListAdapter(Activity activity, List
articles) { super(activity, 0, articles); + myContext = activity; } + static class ViewHolder{ + TextView textView, dateView; + LinearLayout row; + } + @Override public View getView(int position, View convertView, ViewGroup parent) { - Activity activity = (Activity) getContext(); - LayoutInflater inflater = activity.getLayoutInflater(); - - View rowView = inflater.inflate(R.layout.fragment_article_list, null); - Article article = getItem(position); + ViewHolder viewHolder; - - TextView textView = (TextView) rowView.findViewById(R.id.article_title_text); - textView.setText(article.getTitle()); - - TextView dateView = (TextView) rowView.findViewById(R.id.article_listing_smallprint); - String pubDate = article.getPubDate(); - SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss Z", Locale.ENGLISH); - Date pDate; - try { - pDate = df.parse(pubDate); - pubDate = "published " + DateUtils.getDateDifference(pDate) + " by " + article.getAuthor(); - } catch (ParseException e) { - Log.e("DATE PARSING", "Error parsing date.."); - pubDate = "published by " + article.getAuthor(); + if(convertView == null){ + LayoutInflater inflater = myContext.getLayoutInflater(); + convertView = inflater.inflate(R.layout.fragment_article_list, null); + + viewHolder = new ViewHolder(); + viewHolder.textView = (TextView) convertView.findViewById(R.id.article_title_text); + viewHolder.dateView = (TextView) convertView.findViewById(R.id.article_listing_smallprint); + viewHolder.row = (LinearLayout) convertView.findViewById(R.id.article_row_layout); + convertView.setTag(viewHolder); + }else{ + viewHolder = (ViewHolder)convertView.getTag(); } - dateView.setText(pubDate); - - if (!article.isRead()){ - LinearLayout row = (LinearLayout) rowView.findViewById(R.id.article_row_layout); - row.setBackgroundColor(Color.WHITE); - textView.setTypeface(Typeface.DEFAULT_BOLD); + Article article = getItem(position); + if(article != null){ + viewHolder.textView.setText(article.getTitle()); + + String pubDate = article.getPubDate(); + SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss Z", Locale.ENGLISH); + Date pDate; + try { + pDate = df.parse(pubDate); + pubDate = "published " + DateUtils.getDateDifference(pDate) + " by " + article.getAuthor(); + } catch (ParseException e) { + Log.e("DATE PARSING", "Error parsing date.."); + pubDate = "published by " + article.getAuthor(); + } + viewHolder.dateView.setText(pubDate); + + if (!article.isRead()){ + viewHolder.row.setBackgroundColor(Color.WHITE); + viewHolder.textView.setTypeface(Typeface.DEFAULT_BOLD); + } } - return rowView; + return convertView; } -} \ No newline at end of file +}