|
2 | 2 |
|
3 | 3 | import android.animation.ValueAnimator; |
4 | 4 | import android.content.Context; |
| 5 | +import android.database.DataSetObserver; |
5 | 6 | import android.support.v4.view.GestureDetectorCompat; |
6 | 7 | import android.support.v4.widget.ViewDragHelper; |
7 | 8 | import android.util.AttributeSet; |
8 | | -import android.util.Log; |
9 | 9 | import android.view.GestureDetector; |
10 | 10 | import android.view.MotionEvent; |
11 | 11 | import android.view.View; |
|
21 | 21 | public class CardStackView extends ViewGroup { |
22 | 22 | private static final String TAG = "CardStackView"; |
23 | 23 |
|
| 24 | + private final DataSetObserver mObserver = new CardStackViewDataObserver(); |
| 25 | + |
24 | 26 | private CardFactory mCardFactory; |
25 | 27 | private Options mOptions; |
26 | 28 |
|
@@ -55,7 +57,7 @@ public CardStackView(Context context, AttributeSet attrs, int defStyleAttr) { |
55 | 57 |
|
56 | 58 | private void initViews() { |
57 | 59 | for (int i = 0; i < mCardAdapter.getItemCount(); i++) { |
58 | | - addView(mCardAdapter.getView(i, this)); |
| 60 | + addView(mCardAdapter.getView(null, i, this)); |
59 | 61 | } |
60 | 62 | mOptions = new Options(); |
61 | 63 |
|
@@ -271,8 +273,13 @@ private void updateCardPosition() { |
271 | 273 | } |
272 | 274 |
|
273 | 275 | public void setAdapter(CardAdapter adapter) { |
| 276 | + if (mCardAdapter != null) { |
| 277 | + mCardAdapter.unregisterDataSetObserver(mObserver); |
| 278 | + } |
| 279 | + |
274 | 280 | this.mCardAdapter = adapter; |
275 | 281 | if (mCardAdapter != null && mCardAdapter.getItemCount() > 0) { |
| 282 | + mCardAdapter.registerDataSetObserver(mObserver); |
276 | 283 | initViews(); |
277 | 284 | } |
278 | 285 | } |
@@ -307,4 +314,22 @@ public interface onCardClickListener { |
307 | 314 | */ |
308 | 315 | void onClick(View view, int realIndex, int initialIndex); |
309 | 316 | } |
| 317 | + |
| 318 | + private class CardStackViewDataObserver extends DataSetObserver { |
| 319 | + @Override |
| 320 | + public void onChanged() { |
| 321 | + for (int i = 0; i < mCardFactory.size(); i++) { |
| 322 | + CardHolder holder = mCardFactory.get(i); |
| 323 | + holder.mView = mCardAdapter.getView(holder.mView, holder.mChildIndex, CardStackView.this); |
| 324 | + } |
| 325 | + } |
| 326 | + |
| 327 | + @Override |
| 328 | + public void onInvalidated() { |
| 329 | + for (int i = 0; i < mCardFactory.size(); i++) { |
| 330 | + CardHolder holder = mCardFactory.get(i); |
| 331 | + holder.mView.postInvalidate(); |
| 332 | + } |
| 333 | + } |
| 334 | + } |
310 | 335 | } |
0 commit comments