From a02903fbee6725563da4472bd120f844e9d5518c Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Sat, 23 May 2009 13:26:46 -0700 Subject: [PATCH] Fixes NPE in ListViews with non-selectable items. This was caused by a weird initialization issue in ListView and AbsListView: a private final field instanciated in the declaration in ListView was used in AbsListView via an overriden method and that field was somehow null at this time. This fix moves the instanciation at a later point. --- core/java/android/widget/ListView.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index e96ab204bc52f..10d8f55cc6cb6 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -134,7 +134,7 @@ public class ListView extends AbsListView { // used for temporary calculations. private final Rect mTempRect = new Rect(); - private final Paint mDividerPaint = new Paint(); + private Paint mDividerPaint; // the single allocated result per list view; kinda cheesey but avoids // allocating these thingies too often. @@ -2824,6 +2824,9 @@ public class ListView extends AbsListView { final boolean opaque = (color >>> 24) == 0xFF; mIsCacheColorOpaque = opaque; if (opaque) { + if (mDividerPaint == null) { + mDividerPaint = new Paint(); + } mDividerPaint.setColor(color); } super.setCacheColorHint(color); @@ -2849,6 +2852,9 @@ public class ListView extends AbsListView { final boolean areAllItemsSelectable = mAreAllItemsSelectable; final ListAdapter adapter = mAdapter; final boolean isOpaque = isOpaque(); + if (isOpaque && mDividerPaint == null) { + mDividerPaint = new Paint(); + } final Paint paint = mDividerPaint; if (!mStackFromBottom) {