diff options
| author | 2012-02-22 12:22:31 -0800 | |
|---|---|---|
| committer | 2012-02-22 12:22:31 -0800 | |
| commit | 2a23e88486640e6a4f451e37738d73ab295163ef (patch) | |
| tree | 76c0256f1d4932f161aa9e574493d4593747b040 | |
| parent | a352d1e2418f2f43d0e0a82f73799027e304fd96 (diff) | |
| parent | aebd28f729fa28016d70551d0372ab7fcd56ee1a (diff) | |
Merge "Fix bug 6048643 - verify ListView layoutparams while tracking stable IDs"
| -rw-r--r-- | core/java/android/widget/AbsListView.java | 27 | ||||
| -rw-r--r-- | core/java/android/widget/GridView.java | 10 | ||||
| -rw-r--r-- | core/java/android/widget/ListView.java | 6 | 
3 files changed, 26 insertions, 17 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index e7bc1e1f661b..2602523c283f 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -2035,13 +2035,6 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te              }              child = mAdapter.getView(position, scrapView, this); -            if (mAdapterHasStableIds) { -                LayoutParams lp = (LayoutParams) child.getLayoutParams(); -                if (lp == null) { -                    lp = (LayoutParams) generateDefaultLayoutParams(); -                } -                lp.itemId = mAdapter.getItemId(position); -            }              if (ViewDebug.TRACE_RECYCLER) {                  ViewDebug.trace(child, ViewDebug.RecyclerTraceType.BIND_VIEW, @@ -2072,6 +2065,20 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te              }          } +        if (mAdapterHasStableIds) { +            final ViewGroup.LayoutParams vlp = child.getLayoutParams(); +            LayoutParams lp; +            if (vlp == null) { +                lp = (LayoutParams) generateDefaultLayoutParams(); +            } else if (!checkLayoutParams(vlp)) { +                lp = (LayoutParams) generateLayoutParams(vlp); +            } else { +                lp = (LayoutParams) vlp; +            } +            lp.itemId = mAdapter.getItemId(position); +            child.setLayoutParams(lp); +        } +          return child;      } @@ -5383,6 +5390,12 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te      }      @Override +    protected ViewGroup.LayoutParams generateDefaultLayoutParams() { +        return new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, +                ViewGroup.LayoutParams.WRAP_CONTENT, 0); +    } + +    @Override      protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {          return new LayoutParams(p);      } diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java index 6bc5a15f531d..0dedf8b61d32 100644 --- a/core/java/android/widget/GridView.java +++ b/core/java/android/widget/GridView.java @@ -1029,10 +1029,9 @@ public class GridView extends AbsListView {          if (count > 0) {              final View child = obtainView(0, mIsScrap); -            AbsListView.LayoutParams p = (AbsListView.LayoutParams)child.getLayoutParams(); +            AbsListView.LayoutParams p = (AbsListView.LayoutParams) child.getLayoutParams();              if (p == null) { -                p = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, -                        ViewGroup.LayoutParams.WRAP_CONTENT, 0); +                p = (AbsListView.LayoutParams) generateDefaultLayoutParams();                  child.setLayoutParams(p);              }              p.viewType = mAdapter.getItemViewType(0); @@ -1362,10 +1361,9 @@ public class GridView extends AbsListView {          // Respect layout params that are already in the view. Otherwise make          // some up... -        AbsListView.LayoutParams p = (AbsListView.LayoutParams)child.getLayoutParams(); +        AbsListView.LayoutParams p = (AbsListView.LayoutParams) child.getLayoutParams();          if (p == null) { -            p = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, -                    ViewGroup.LayoutParams.WRAP_CONTENT, 0); +            p = (AbsListView.LayoutParams) generateDefaultLayoutParams();          }          p.viewType = mAdapter.getItemViewType(position); diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index 46c2c0725d0d..71700b367b40 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -1163,8 +1163,7 @@ public class ListView extends AbsListView {      private void measureScrapChild(View child, int position, int widthMeasureSpec) {          LayoutParams p = (LayoutParams) child.getLayoutParams();          if (p == null) { -            p = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, -                    ViewGroup.LayoutParams.WRAP_CONTENT, 0); +            p = (AbsListView.LayoutParams) generateDefaultLayoutParams();              child.setLayoutParams(p);          }          p.viewType = mAdapter.getItemViewType(position); @@ -1808,8 +1807,7 @@ public class ListView extends AbsListView {          // noinspection unchecked          AbsListView.LayoutParams p = (AbsListView.LayoutParams) child.getLayoutParams();          if (p == null) { -            p = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, -                    ViewGroup.LayoutParams.WRAP_CONTENT, 0); +            p = (AbsListView.LayoutParams) generateDefaultLayoutParams();          }          p.viewType = mAdapter.getItemViewType(position);  |