@@ -16,19 +16,20 @@ public class AdapterLayoutDelegate {
1616 private ViewGroup mViewGroup ;
1717
1818 /**
19- * Checks for if the data changes
19+ * Checks for if the data changes and changes the views accordingly
2020 */
2121 private RecyclerView .AdapterDataObserver mObserver = new RecyclerView .AdapterDataObserver () {
2222 @ Override
2323 public void onChanged () {
2424 super .onChanged ();
25+ //too general, we just have to completely recreate
2526 recreateViews ();
2627 }
2728
2829 @ Override
2930 public void onItemRangeChanged (int positionStart , int itemCount ) {
3031 super .onItemRangeChanged (positionStart , itemCount );
31- recreateViews ( );
32+ updateViews ( positionStart , itemCount , null );
3233 }
3334
3435 @ Override
@@ -40,13 +41,13 @@ public void onItemRangeChanged(int positionStart, int itemCount, Object payload)
4041 @ Override
4142 public void onItemRangeInserted (int positionStart , int itemCount ) {
4243 super .onItemRangeInserted (positionStart , itemCount );
43- recreateViews ( );
44+ addViews ( positionStart , itemCount );
4445 }
4546
4647 @ Override
4748 public void onItemRangeRemoved (int positionStart , int itemCount ) {
4849 super .onItemRangeRemoved (positionStart , itemCount );
49- recreateViews ( );
50+ removeViews ( positionStart , itemCount );
5051 }
5152
5253 @ Override
@@ -83,6 +84,10 @@ public void setAdapter(RecyclerView.Adapter adapter) {
8384 recreateViews ();
8485 }
8586
87+ /**
88+ * Returns the adapter which was passed via {@link #setAdapter(RecyclerView.Adapter)}
89+ * @return the adapter
90+ */
8691 public @ Nullable RecyclerView .Adapter getAdapter () {
8792 return mAdapter ;
8893 }
@@ -101,7 +106,8 @@ public void setAdapter(RecyclerView.Adapter adapter) {
101106 }
102107
103108 private void addViews (int positionStart , int itemCount ) {
104- for (int i =positionStart ; i <itemCount ; i ++) {
109+ final int end = positionStart + itemCount ;
110+ for (int i =positionStart ; i <end ; i ++) {
105111 addViewAt (i );
106112 }
107113 }
@@ -120,7 +126,8 @@ private void addViewAt(int viewType, int index) {
120126
121127 private void updateViews (int positionStart , int itemCount , Object payload ) {
122128 //TODO do something with the payload?
123- for (int i =positionStart ; i <itemCount ; i ++) {
129+ final int end = positionStart + itemCount ;
130+ for (int i =positionStart ; i <end ; i ++) {
124131 RecyclerView .ViewHolder viewHolder = getViewHolderAt (i );
125132 if (payload != null ) {
126133 mAdapter .onBindViewHolder (viewHolder , i );
0 commit comments