Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Merge branch 'pr/n36_quazardous' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
nhaarman committed Oct 13, 2013
2 parents 71ac2b8 + c1468da commit 005f0d2
Show file tree
Hide file tree
Showing 6 changed files with 200 additions and 55 deletions.
1 change: 1 addition & 0 deletions library/project.properties
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@
# Project target.
target=android-18
android.library=true
android.library.reference.1=../../../workspace/android-support-v7-appcompat
22 changes: 19 additions & 3 deletions library/src/com/haarman/listviewanimations/ArrayAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,18 @@
import java.util.Collections;
import java.util.List;

import android.widget.BaseAdapter;

import com.haarman.listviewanimations.view.DynamicListView;
import com.haarman.listviewanimations.view.DynamicListView.Swappable;

import android.widget.BaseAdapter;

/**
* A true {@link ArrayList} adapter providing access to all ArrayList methods.
* Also implements {@link Swappable} for easy item swapping.
*/
public abstract class ArrayAdapter<T> extends BaseAdapter implements DynamicListView.Swappable {

private List<T> mItems;
protected List<T> mItems;

/**
* Creates a new ArrayAdapter with an empty list.
Expand All @@ -44,12 +44,14 @@ public ArrayAdapter() {
* Creates a new {@link ArrayAdapter} with a <b>copy</b> of the specified
* list, or an empty list if items == null.
*/

public ArrayAdapter(List<T> items) {
mItems = new ArrayList<T>();
if (items != null) {
mItems.addAll(items);
}
}


@Override
public int getCount() {
Expand Down Expand Up @@ -203,4 +205,18 @@ public void swapItems(int positionOne, int positionTwo) {
set(positionOne, getItem(positionTwo));
set(positionTwo, temp);
}

private BaseAdapter mDataSetChangedSlavedAdapter;

public void propagateNotifyDataSetChanged(BaseAdapter slavedAdapter) {
mDataSetChangedSlavedAdapter = slavedAdapter;
}

@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
if (mDataSetChangedSlavedAdapter != null) {
mDataSetChangedSlavedAdapter.notifyDataSetChanged();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,22 @@ public boolean isEnabled(int position) {

@Override
public void notifyDataSetChanged() {
mDecoratedBaseAdapter.notifyDataSetChanged();
if (!(mDecoratedBaseAdapter instanceof ArrayAdapter<?>)) {
// fix #35 dirty trick !
// leads to an infinite loop when trying because ArrayAdapter triggers notifyDataSetChanged itself
mDecoratedBaseAdapter.notifyDataSetChanged();
}
}

/**
* Helper function if you want to force notifyDataSetChanged()
* @param force
*/
public void notifyDataSetChanged(Boolean force) {
if ((force) || (!(mDecoratedBaseAdapter instanceof ArrayAdapter<?>))) {
// leads to an infinite loop when trying because ArrayAdapter triggers notifyDataSetChanged itself
mDecoratedBaseAdapter.notifyDataSetChanged();
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import android.widget.AbsListView;
import android.widget.BaseAdapter;

import com.haarman.listviewanimations.ArrayAdapter;
import com.haarman.listviewanimations.BaseAdapterDecorator;

/**
Expand All @@ -26,18 +27,40 @@
*/
public class SwipeDismissAdapter extends BaseAdapterDecorator {

private OnDismissCallback mCallback;
private SwipeDismissListViewTouchListener mSwipeDismissListViewTouchListener;
protected OnDismissCallback mCallback;
protected SwipeDismissListViewTouchListener mSwipeDismissListViewTouchListener;

protected SwipeOnScrollListener mOnScroll;

public SwipeDismissAdapter(BaseAdapter baseAdapter, OnDismissCallback callback) {
// add a default OnScrollListener
this(baseAdapter, callback, new SwipeOnScrollListener());
}

public SwipeDismissAdapter(BaseAdapter baseAdapter, OnDismissCallback callback, SwipeOnScrollListener onScroll) {
super(baseAdapter);
mCallback = callback;
mOnScroll = onScroll;
}


/**
* Override-able
* @param listView
* @return SwipeDismissListViewTouchListener
*/
protected SwipeDismissListViewTouchListener createListViewTouchListener(AbsListView listView) {
return new SwipeDismissListViewTouchListener(listView, mCallback, mOnScroll);
}

@Override
public void setAbsListView(AbsListView listView) {
super.setAbsListView(listView);
mSwipeDismissListViewTouchListener = new SwipeDismissListViewTouchListener(listView, mCallback);
if (mDecoratedBaseAdapter instanceof ArrayAdapter<?>) {
// fix #35 dirty trick !
// if ArrayAdapter we assume that items manipulation will come from it
((ArrayAdapter<?>)mDecoratedBaseAdapter).propagateNotifyDataSetChanged(this);
}
mSwipeDismissListViewTouchListener = createListViewTouchListener(listView);
mSwipeDismissListViewTouchListener.setIsParentHorizontalScrollContainer(isParentHorizontalScrollContainer());
mSwipeDismissListViewTouchListener.setTouchChild(getTouchChild());
listView.setOnTouchListener(mSwipeDismissListViewTouchListener);
Expand All @@ -54,7 +77,9 @@ public void setIsParentHorizontalScrollContainer(boolean isParentHorizontalScrol
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
mSwipeDismissListViewTouchListener.notifyDataSetChanged();
if (mSwipeDismissListViewTouchListener != null) {
mSwipeDismissListViewTouchListener.notifyDataSetChanged();
}
}

@Override
Expand Down
Loading

0 comments on commit 005f0d2

Please sign in to comment.