diff --git a/demo/build.gradle b/demo/build.gradle
index bf08410..244366f 100644
--- a/demo/build.gradle
+++ b/demo/build.gradle
@@ -1,5 +1,9 @@
apply plugin: 'com.android.application'
+repositories {
+ maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
+}
+
android {
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
@@ -21,8 +25,10 @@ android {
dependencies {
compile project(":library")
- compile 'com.nineoldandroids:library:2.4.0'
+ compile 'com.android.support:recyclerview-v7:21.0.0'
compile 'com.daimajia.easing:library:1.0.0@aar'
compile 'com.daimajia.androidanimations:library:1.1.2@aar'
compile 'com.nineoldandroids:library:2.4.0'
+ compile 'org.lucasr.twowayview:core:1.0.0-SNAPSHOT@aar'
+ compile 'org.lucasr.twowayview:layouts:1.0.0-SNAPSHOT@aar'
}
diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml
index 3415667..318a010 100644
--- a/demo/src/main/AndroidManifest.xml
+++ b/demo/src/main/AndroidManifest.xml
@@ -1,24 +1,28 @@
+ xmlns:tools="http://schemas.android.com/tools"
+ package="com.daimajia.swipedemo">
+
+
+ android:theme="@style/AppTheme">
+ android:label="@string/app_name">
-
-
-
+
+
+
+
diff --git a/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java
index 8e79c45..ff46588 100644
--- a/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java
+++ b/demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java
@@ -8,6 +8,7 @@ import android.widget.AdapterView;
import android.widget.GridView;
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
+import com.daimajia.swipe.util.Attributes;
import com.daimajia.swipedemo.adapter.GridViewAdapter;
public class GridViewExample extends Activity{
@@ -18,7 +19,7 @@ public class GridViewExample extends Activity{
setContentView(R.layout.gridview);
final GridView gridView = (GridView)findViewById(R.id.gridview);
final GridViewAdapter adapter = new GridViewAdapter(this);
- adapter.setMode(SwipeItemMangerImpl.Mode.Multiple);
+ adapter.setMode(Attributes.Mode.Multiple);
gridView.setAdapter(adapter);
gridView.setSelected(false);
gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
diff --git a/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java
index 3079cf4..4868a95 100644
--- a/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java
+++ b/demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java
@@ -15,6 +15,7 @@ import android.widget.ListView;
import android.widget.Toast;
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
+import com.daimajia.swipe.util.Attributes;
import com.daimajia.swipedemo.adapter.ListViewAdapter;
public class ListViewExample extends Activity {
@@ -39,7 +40,7 @@ public class ListViewExample extends Activity {
mAdapter = new ListViewAdapter(this);
mListView.setAdapter(mAdapter);
- mAdapter.setMode(SwipeItemMangerImpl.Mode.Single);
+ mAdapter.setMode(Attributes.Mode.Single);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
diff --git a/demo/src/main/java/com/daimajia/swipedemo/MyActivity.java b/demo/src/main/java/com/daimajia/swipedemo/MyActivity.java
index 18fb36f..e1149dd 100644
--- a/demo/src/main/java/com/daimajia/swipedemo/MyActivity.java
+++ b/demo/src/main/java/com/daimajia/swipedemo/MyActivity.java
@@ -113,11 +113,13 @@ public class MyActivity extends Activity {
} else if (id == R.id.action_gridview) {
startActivity(new Intent(this, GridViewExample.class));
return true;
- } else if(id == R.id.action_nexted){
+ } else if (id == R.id.action_nested) {
startActivity(new Intent(this, NestedExample.class));
return true;
+ } else if (id == R.id.action_recycler) {
+ startActivity(new Intent(this, RecyclerViewExample.class));
}
- return super.onOptionsItemSelected(item);
+ return super.onOptionsItemSelected(item);
}
/*
diff --git a/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java b/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java
new file mode 100644
index 0000000..a7415f4
--- /dev/null
+++ b/demo/src/main/java/com/daimajia/swipedemo/RecyclerViewExample.java
@@ -0,0 +1,151 @@
+package com.daimajia.swipedemo;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.Toast;
+
+import com.daimajia.swipe.util.Attributes;
+import com.daimajia.swipedemo.adapter.RecyclerViewSimpleAdapter;
+
+import org.lucasr.twowayview.ItemClickSupport;
+import org.lucasr.twowayview.TwoWayLayoutManager;
+import org.lucasr.twowayview.widget.DividerItemDecoration;
+import org.lucasr.twowayview.widget.ListLayoutManager;
+
+public class RecyclerViewExample extends Activity {
+
+ private RecyclerView recyclerView;
+ private RecyclerView.Adapter mAdapter;
+ // RecyclerView.LayoutManager: https://developer.android.com/reference/android/support/v7/widget/RecyclerView.LayoutManager.html
+ // Our LayoutManager uses: https://github.com/lucasr/twoway-view to help with decoration and can be used for a more advanced config as well.
+ // Read http://lucasr.org/2014/07/31/the-new-twowayview/ for a better understanding
+ private RecyclerView.LayoutManager mLayoutManager;
+ private Context mContext = this;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.recyclerview);
+ recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
+
+ /**
+ * The following comment is the sample usage of ArraySwipeAdapter.
+ */
+ String[] adapterData = new String[]{"Activity", "Service", "Content Provider", "Intent", "BroadcastReceiver", "ADT", "Sqlite3", "HttpClient",
+ "DDMS", "Android Studio", "Fragment", "Loader", "Activity", "Service", "Content Provider", "Intent",
+ "BroadcastReceiver", "ADT", "Sqlite3", "HttpClient", "Activity", "Service", "Content Provider", "Intent",
+ "BroadcastReceiver", "ADT", "Sqlite3", "HttpClient"};
+
+ // Uses a ListLayout manager from TwoWayView Lib:
+ mLayoutManager = new ListLayoutManager(this, TwoWayLayoutManager.Orientation.VERTICAL);
+ recyclerView.setLayoutManager(mLayoutManager);
+ final Drawable divider = getResources().getDrawable(R.drawable.divider);
+ recyclerView.addItemDecoration(new DividerItemDecoration(divider));
+
+ mAdapter = new RecyclerViewSimpleAdapter(this, adapterData);
+ recyclerView.setAdapter(mAdapter);
+ ((RecyclerViewSimpleAdapter) mAdapter).setMode(Attributes.Mode.Single);
+
+ /* Listeners */
+ ItemClickSupport itemClick = ItemClickSupport.addTo(recyclerView);
+ itemClick.setOnItemClickListener(onItemClickListener);
+ recyclerView.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ Log.e("ListView", "OnTouch");
+ return false;
+ }
+ });
+ recyclerView.setOnScrollListener(onScrollListener);
+
+ // TODO: Item Long Click is firing for every touch.
+// itemClick.setOnItemLongClickListener(onItemLongClickListener);
+
+ // TODO: Item Selection Support for RecyclerView
+// recyclerView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+// @Override
+// public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+// Log.e("ListView", "onItemSelected:" + position);
+// }
+//
+// @Override
+// public void onNothingSelected(AdapterView> parent) {
+// Log.e("ListView", "onNothingSelected:");
+// }
+// });
+
+ }
+
+ /**
+ * Substitute for our onItemClick listener for RecyclerView
+ */
+ ItemClickSupport.OnItemClickListener onItemClickListener = new ItemClickSupport.OnItemClickListener() {
+ @Override
+ public void onItemClick(RecyclerView parent, View child, int position, long id) {
+ Toast.makeText(mContext, "Clicked:" + position, Toast.LENGTH_SHORT).show();
+ }
+ };
+
+ /**
+ * Substitute for our onItemLongClick listener for RecyclerView
+ */
+ ItemClickSupport.OnItemLongClickListener onItemLongClickListener = new ItemClickSupport.OnItemLongClickListener() {
+ @Override
+ public boolean onItemLongClick(RecyclerView recyclerView, View view, int position, long id) {
+ Toast.makeText(mContext, "OnItemLongClickListener:" + position, Toast.LENGTH_SHORT).show();
+ return false;
+ }
+ };
+
+ /**
+ * Substitute for our onScrollListener for RecyclerView
+ */
+ RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
+ @Override
+ public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
+ super.onScrollStateChanged(recyclerView, newState);
+ Log.e("ListView", "onScrollStateChanged");
+ }
+
+ @Override
+ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+ super.onScrolled(recyclerView, dx, dy);
+ }
+ };
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.my, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle action bar item clicks here. The action bar will
+ // automatically handle clicks on the Home/Up button, so long
+ // as you specify a parent activity in AndroidManifest.xml.
+ int id = item.getItemId();
+ if (id == R.id.action_listview) {
+ startActivity(new Intent(this, ListViewExample.class));
+ finish();
+ return true;
+ } else if (id == R.id.action_gridview) {
+ startActivity(new Intent(this, GridViewExample.class));
+ finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewSimpleAdapter.java b/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewSimpleAdapter.java
new file mode 100644
index 0000000..6e49d57
--- /dev/null
+++ b/demo/src/main/java/com/daimajia/swipedemo/adapter/RecyclerViewSimpleAdapter.java
@@ -0,0 +1,132 @@
+package com.daimajia.swipedemo.adapter;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.daimajia.androidanimations.library.Techniques;
+import com.daimajia.androidanimations.library.YoYo;
+import com.daimajia.swipe.SimpleSwipeListener;
+import com.daimajia.swipe.SwipeLayout;
+import com.daimajia.swipe.implments.SwipeItemRecyclerMangerImpl;
+import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
+import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
+import com.daimajia.swipe.util.Attributes;
+import com.daimajia.swipedemo.R;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+public class RecyclerViewSimpleAdapter extends RecyclerView.Adapter implements SwipeItemMangerInterface, SwipeAdapterInterface {
+
+ public static class ViewHolder extends RecyclerView.ViewHolder {
+ SwipeLayout swipeLayout;
+ TextView textView;
+
+ public ViewHolder(View itemView) {
+ super(itemView);
+ swipeLayout = (SwipeLayout) itemView.findViewById(R.id.swipe);
+ textView = (TextView) itemView.findViewById(R.id.position);
+ }
+ }
+
+ private Context mContext;
+ private String[] mDataset;
+
+ protected SwipeItemRecyclerMangerImpl mItemManger = new SwipeItemRecyclerMangerImpl(this);
+
+
+ public RecyclerViewSimpleAdapter(Context context, String[] objects) {
+ this.mContext = context;
+ this.mDataset = objects;
+ }
+
+ @Override
+ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listview_item, parent, false);
+ return new ViewHolder(view);
+ }
+
+ @Override
+ public void onBindViewHolder(ViewHolder viewHolder, int position) {
+ viewHolder.swipeLayout.addSwipeListener(new SimpleSwipeListener() {
+ @Override
+ public void onOpen(SwipeLayout layout) {
+ YoYo.with(Techniques.Tada).duration(500).delay(100).playOn(layout.findViewById(R.id.trash));
+ }
+ });
+ viewHolder.swipeLayout.setOnDoubleClickListener(new SwipeLayout.DoubleClickListener() {
+ @Override
+ public void onDoubleClick(SwipeLayout layout, boolean surface) {
+ Toast.makeText(mContext, "DoubleClick", Toast.LENGTH_SHORT).show();
+ }
+ });
+ viewHolder.textView.setText((position + 1) + ".");
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public int getItemCount() {
+ return mDataset.length;
+ }
+
+ @Override
+ public void openItem(int position) {
+ mItemManger.openItem(position);
+ }
+
+ @Override
+ public void closeItem(int position) {
+ mItemManger.closeItem(position);
+ }
+
+ @Override
+ public void closeAllExcept(SwipeLayout layout) {
+ mItemManger.closeAllExcept(layout);
+ }
+
+ @Override
+ public List getOpenItems() {
+ return mItemManger.getOpenItems();
+ }
+
+ @Override
+ public List getOpenLayouts() {
+ return mItemManger.getOpenLayouts();
+ }
+
+ @Override
+ public void removeShownLayouts(SwipeLayout layout) {
+ mItemManger.removeShownLayouts(layout);
+ }
+
+ @Override
+ public boolean isOpen(int position) {
+ return mItemManger.isOpen(position);
+ }
+
+ @Override
+ public Attributes.Mode getMode() {
+ return mItemManger.getMode();
+ }
+
+ @Override
+ public void setMode(Attributes.Mode mode) {
+ mItemManger.setMode(mode);
+ }
+
+ @Override
+ public int getSwipeLayoutResourceId(int position) {
+ return R.id.swipe;
+ }
+}
diff --git a/demo/src/main/res/drawable/divider.xml b/demo/src/main/res/drawable/divider.xml
new file mode 100644
index 0000000..c837d29
--- /dev/null
+++ b/demo/src/main/res/drawable/divider.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo/src/main/res/layout/listview_item.xml b/demo/src/main/res/layout/listview_item.xml
index db12e97..4dd617b 100644
--- a/demo/src/main/res/layout/listview_item.xml
+++ b/demo/src/main/res/layout/listview_item.xml
@@ -2,58 +2,62 @@
-
+ swipe:horizontalSwipeOffset="0dp">
+ android:layout_height="80dp"
+ android:background="#FF5534"
+ android:gravity="center"
+ android:tag="Bottom3"
+ android:weightSum="10">
+
+ android:layout_height="30dp"
+ android:layout_weight="1"
+ android:src="@drawable/trash" />
+
+ android:layout_height="wrap_content"
+ android:layout_weight="5"
+ android:text="Delete Item?"
+ android:textColor="#fff"
+ android:textSize="17sp" />
+
+ android:textColor="#FF5534" />
+ android:layout_height="match_parent"
+ android:background="@drawable/item_selector"
+ android:padding="10dp">
+
+
+ android:layout_height="match_parent"
+ android:tag="Hover"
+ android:text="Do not, for one repulse, forgo the purpose that you resolved to effort. " />
diff --git a/demo/src/main/res/layout/recyclerview.xml b/demo/src/main/res/layout/recyclerview.xml
new file mode 100644
index 0000000..3f1387f
--- /dev/null
+++ b/demo/src/main/res/layout/recyclerview.xml
@@ -0,0 +1,7 @@
+
+
+
\ No newline at end of file
diff --git a/demo/src/main/res/menu/my.xml b/demo/src/main/res/menu/my.xml
index 087d48c..df54633 100644
--- a/demo/src/main/res/menu/my.xml
+++ b/demo/src/main/res/menu/my.xml
@@ -1,14 +1,19 @@
diff --git a/library/build.gradle b/library/build.gradle
index a5ad7c5..b2a64c1 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -11,6 +11,7 @@ android {
}
dependencies {
- compile 'com.android.support:support-v4:20.+'
+ compile 'com.android.support:recyclerview-v7:21.0.0'
+ compile 'com.android.support:support-v4:21.0.3'
}
apply from: './gradle-mvn-push.gradle'
\ No newline at end of file
diff --git a/library/src/main/java/com/daimajia/swipe/adapters/ArraySwipeAdapter.java b/library/src/main/java/com/daimajia/swipe/adapters/ArraySwipeAdapter.java
index 461b38d..40f4791 100644
--- a/library/src/main/java/com/daimajia/swipe/adapters/ArraySwipeAdapter.java
+++ b/library/src/main/java/com/daimajia/swipe/adapters/ArraySwipeAdapter.java
@@ -9,6 +9,7 @@ import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
+import com.daimajia.swipe.util.Attributes;
import java.util.List;
@@ -88,12 +89,12 @@ public abstract class ArraySwipeAdapter extends ArrayAdapter implements Swipe
}
@Override
- public SwipeItemMangerImpl.Mode getMode() {
+ public Attributes.Mode getMode() {
return mItemManger.getMode();
}
@Override
- public void setMode(SwipeItemMangerImpl.Mode mode) {
+ public void setMode(Attributes.Mode mode) {
mItemManger.setMode(mode);
}
}
diff --git a/library/src/main/java/com/daimajia/swipe/adapters/BaseSwipeAdapter.java b/library/src/main/java/com/daimajia/swipe/adapters/BaseSwipeAdapter.java
index f78d414..305cf4a 100644
--- a/library/src/main/java/com/daimajia/swipe/adapters/BaseSwipeAdapter.java
+++ b/library/src/main/java/com/daimajia/swipe/adapters/BaseSwipeAdapter.java
@@ -8,6 +8,7 @@ import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
+import com.daimajia.swipe.util.Attributes;
import java.util.List;
@@ -90,12 +91,12 @@ public abstract class BaseSwipeAdapter extends BaseAdapter implements SwipeItemM
}
@Override
- public SwipeItemMangerImpl.Mode getMode() {
+ public Attributes.Mode getMode() {
return mItemManger.getMode();
}
@Override
- public void setMode(SwipeItemMangerImpl.Mode mode) {
+ public void setMode(Attributes.Mode mode) {
mItemManger.setMode(mode);
}
}
diff --git a/library/src/main/java/com/daimajia/swipe/adapters/CursorSwipeAdapter.java b/library/src/main/java/com/daimajia/swipe/adapters/CursorSwipeAdapter.java
index fd55eac..7db8598 100644
--- a/library/src/main/java/com/daimajia/swipe/adapters/CursorSwipeAdapter.java
+++ b/library/src/main/java/com/daimajia/swipe/adapters/CursorSwipeAdapter.java
@@ -10,6 +10,7 @@ import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
+import com.daimajia.swipe.util.Attributes;
import java.util.List;
@@ -73,12 +74,12 @@ public abstract class CursorSwipeAdapter extends CursorAdapter implements SwipeI
}
@Override
- public SwipeItemMangerImpl.Mode getMode() {
+ public Attributes.Mode getMode() {
return mItemManger.getMode();
}
@Override
- public void setMode(SwipeItemMangerImpl.Mode mode) {
+ public void setMode(Attributes.Mode mode) {
mItemManger.setMode(mode);
}
}
diff --git a/library/src/main/java/com/daimajia/swipe/adapters/SimpleCursorSwipeAdapter.java b/library/src/main/java/com/daimajia/swipe/adapters/SimpleCursorSwipeAdapter.java
index 6a0883a..2d12513 100644
--- a/library/src/main/java/com/daimajia/swipe/adapters/SimpleCursorSwipeAdapter.java
+++ b/library/src/main/java/com/daimajia/swipe/adapters/SimpleCursorSwipeAdapter.java
@@ -10,6 +10,7 @@ import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
+import com.daimajia.swipe.util.Attributes;
import java.util.List;
@@ -73,12 +74,12 @@ public abstract class SimpleCursorSwipeAdapter extends SimpleCursorAdapter imple
}
@Override
- public SwipeItemMangerImpl.Mode getMode() {
+ public Attributes.Mode getMode() {
return mItemManger.getMode();
}
@Override
- public void setMode(SwipeItemMangerImpl.Mode mode) {
+ public void setMode(Attributes.Mode mode) {
mItemManger.setMode(mode);
}
}
diff --git a/library/src/main/java/com/daimajia/swipe/implments/SwipeItemMangerImpl.java b/library/src/main/java/com/daimajia/swipe/implments/SwipeItemMangerImpl.java
index fdb20f8..cd7a4cb 100644
--- a/library/src/main/java/com/daimajia/swipe/implments/SwipeItemMangerImpl.java
+++ b/library/src/main/java/com/daimajia/swipe/implments/SwipeItemMangerImpl.java
@@ -7,6 +7,7 @@ import com.daimajia.swipe.SimpleSwipeListener;
import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
+import com.daimajia.swipe.util.Attributes;
import java.util.ArrayList;
import java.util.Arrays;
@@ -19,7 +20,7 @@ import java.util.Set;
*/
public class SwipeItemMangerImpl implements SwipeItemMangerInterface {
- private Mode mode = Mode.Single;
+ private Attributes.Mode mode = Attributes.Mode.Single;
public final int INVALID_POSITION = -1;
protected int mOpenPosition = INVALID_POSITION;
@@ -39,15 +40,11 @@ public class SwipeItemMangerImpl implements SwipeItemMangerInterface {
this.mAdapter = adapter;
}
- public enum Mode{
- Single, Multiple
- };
-
- public Mode getMode(){
+ public Attributes.Mode getMode(){
return mode;
}
- public void setMode(Mode mode){
+ public void setMode(Attributes.Mode mode){
this.mode = mode;
mOpenPositions.clear();
mShownLayouts.clear();
@@ -89,7 +86,7 @@ public class SwipeItemMangerImpl implements SwipeItemMangerInterface {
@Override
public void openItem(int position) {
- if(mode == Mode.Multiple){
+ if(mode == Attributes.Mode.Multiple){
if(!mOpenPositions.contains(position))
mOpenPositions.add(position);
}else{
@@ -100,7 +97,7 @@ public class SwipeItemMangerImpl implements SwipeItemMangerInterface {
@Override
public void closeItem(int position) {
- if(mode == Mode.Multiple){
+ if(mode == Attributes.Mode.Multiple){
mOpenPositions.remove(position);
}else{
if(mOpenPosition == position)
@@ -124,7 +121,7 @@ public class SwipeItemMangerImpl implements SwipeItemMangerInterface {
@Override
public List getOpenItems() {
- if(mode == Mode.Multiple){
+ if(mode == Attributes.Mode.Multiple){
return new ArrayList(mOpenPositions);
}else{
return Arrays.asList(mOpenPosition);
@@ -138,7 +135,7 @@ public class SwipeItemMangerImpl implements SwipeItemMangerInterface {
@Override
public boolean isOpen(int position) {
- if(mode == Mode.Multiple){
+ if(mode == Attributes.Mode.Multiple){
return mOpenPositions.contains(position);
}else{
return mOpenPosition == position;
@@ -190,7 +187,7 @@ public class SwipeItemMangerImpl implements SwipeItemMangerInterface {
@Override
public void onClose(SwipeLayout layout) {
- if(mode == Mode.Multiple){
+ if(mode == Attributes.Mode.Multiple){
mOpenPositions.remove(position);
}else{
mOpenPosition = INVALID_POSITION;
@@ -199,14 +196,14 @@ public class SwipeItemMangerImpl implements SwipeItemMangerInterface {
@Override
public void onStartOpen(SwipeLayout layout) {
- if(mode == Mode.Single) {
+ if(mode == Attributes.Mode.Single) {
closeAllExcept(layout);
}
}
@Override
public void onOpen(SwipeLayout layout) {
- if (mode == Mode.Multiple)
+ if (mode == Attributes.Mode.Multiple)
mOpenPositions.add(position);
else {
closeAllExcept(layout);
diff --git a/library/src/main/java/com/daimajia/swipe/implments/SwipeItemRecyclerMangerImpl.java b/library/src/main/java/com/daimajia/swipe/implments/SwipeItemRecyclerMangerImpl.java
new file mode 100644
index 0000000..a55513f
--- /dev/null
+++ b/library/src/main/java/com/daimajia/swipe/implments/SwipeItemRecyclerMangerImpl.java
@@ -0,0 +1,219 @@
+package com.daimajia.swipe.implments;
+
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+
+import com.daimajia.swipe.SimpleSwipeListener;
+import com.daimajia.swipe.SwipeLayout;
+import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
+import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
+import com.daimajia.swipe.util.Attributes;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * SwipeItemMangerImpl is a helper class to help all the adapters to maintain open status.
+ */
+public class SwipeItemRecyclerMangerImpl implements SwipeItemMangerInterface {
+
+ private Attributes.Mode mode = Attributes.Mode.Single;
+ public final int INVALID_POSITION = -1;
+
+ protected int mOpenPosition = INVALID_POSITION;
+
+ protected Set mOpenPositions = new HashSet();
+ protected Set mShownLayouts = new HashSet();
+
+ protected RecyclerView.Adapter mAdapter;
+
+ public SwipeItemRecyclerMangerImpl(RecyclerView.Adapter adapter) {
+ if(adapter == null)
+ throw new IllegalArgumentException("Adapter can not be null");
+
+ if(!(adapter instanceof SwipeItemMangerInterface))
+ throw new IllegalArgumentException("adapter should implement the SwipeAdapterInterface");
+
+ this.mAdapter = adapter;
+ }
+
+ public Attributes.Mode getMode(){
+ return mode;
+ }
+
+ public void setMode(Attributes.Mode mode){
+ this.mode = mode;
+ mOpenPositions.clear();
+ mShownLayouts.clear();
+ mOpenPosition = INVALID_POSITION;
+ }
+
+ public void initialize(View target, int position) {
+ int resId = getSwipeLayoutId(position);
+
+ OnLayoutListener onLayoutListener = new OnLayoutListener(position);
+ SwipeLayout swipeLayout = (SwipeLayout)target.findViewById(resId);
+ if(swipeLayout == null)
+ throw new IllegalStateException("can not find SwipeLayout in target view");
+
+ SwipeMemory swipeMemory = new SwipeMemory(position);
+ swipeLayout.addSwipeListener(swipeMemory);
+ swipeLayout.addOnLayoutListener(onLayoutListener);
+ swipeLayout.setTag(resId, new ValueBox(position, swipeMemory, onLayoutListener));
+
+ mShownLayouts.add(swipeLayout);
+ }
+
+ public void updateConvertView(View target, int position) {
+ int resId = getSwipeLayoutId(position);
+
+ SwipeLayout swipeLayout = (SwipeLayout)target.findViewById(resId);
+ if(swipeLayout == null)
+ throw new IllegalStateException("can not find SwipeLayout in target view");
+
+ ValueBox valueBox = (ValueBox)swipeLayout.getTag(resId);
+ valueBox.swipeMemory.setPosition(position);
+ valueBox.onLayoutListener.setPosition(position);
+ valueBox.position = position;
+ }
+
+ private int getSwipeLayoutId(int position){
+ return ((SwipeAdapterInterface)(mAdapter)).getSwipeLayoutResourceId(position);
+ }
+
+ @Override
+ public void openItem(int position) {
+ if(mode == Attributes.Mode.Multiple){
+ if(!mOpenPositions.contains(position))
+ mOpenPositions.add(position);
+ }else{
+ mOpenPosition = position;
+ }
+ mAdapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void closeItem(int position) {
+ if(mode == Attributes.Mode.Multiple){
+ mOpenPositions.remove(position);
+ }else{
+ if(mOpenPosition == position)
+ mOpenPosition = INVALID_POSITION;
+ }
+ mAdapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void closeAllExcept(SwipeLayout layout) {
+ for(SwipeLayout s : mShownLayouts){
+ if(s != layout)
+ s.close();
+ }
+ }
+
+ @Override
+ public void removeShownLayouts(SwipeLayout layout) {
+ mShownLayouts.remove(layout);
+ }
+
+ @Override
+ public List getOpenItems() {
+ if(mode == Attributes.Mode.Multiple){
+ return new ArrayList(mOpenPositions);
+ }else{
+ return Arrays.asList(mOpenPosition);
+ }
+ }
+
+ @Override
+ public List getOpenLayouts() {
+ return new ArrayList(mShownLayouts);
+ }
+
+ @Override
+ public boolean isOpen(int position) {
+ if(mode == Attributes.Mode.Multiple){
+ return mOpenPositions.contains(position);
+ }else{
+ return mOpenPosition == position;
+ }
+ }
+
+ class ValueBox {
+ OnLayoutListener onLayoutListener;
+ SwipeMemory swipeMemory;
+ int position;
+
+ ValueBox(int position, SwipeMemory swipeMemory, OnLayoutListener onLayoutListener) {
+ this.swipeMemory = swipeMemory;
+ this.onLayoutListener = onLayoutListener;
+ this.position = position;
+ }
+ }
+
+ class OnLayoutListener implements SwipeLayout.OnLayout{
+
+ private int position;
+
+ OnLayoutListener(int position) {
+ this.position = position;
+ }
+
+ public void setPosition(int position){
+ this.position = position;
+ }
+
+ @Override
+ public void onLayout(SwipeLayout v) {
+ if(isOpen(position)){
+ v.open(false, false);
+ }else{
+ v.close(false, false);
+ }
+ }
+
+ }
+
+ class SwipeMemory extends SimpleSwipeListener {
+
+ private int position;
+
+ SwipeMemory(int position) {
+ this.position = position;
+ }
+
+ @Override
+ public void onClose(SwipeLayout layout) {
+ if(mode == Attributes.Mode.Multiple){
+ mOpenPositions.remove(position);
+ }else{
+ mOpenPosition = INVALID_POSITION;
+ }
+ }
+
+ @Override
+ public void onStartOpen(SwipeLayout layout) {
+ if(mode == Attributes.Mode.Single) {
+ closeAllExcept(layout);
+ }
+ }
+
+ @Override
+ public void onOpen(SwipeLayout layout) {
+ if (mode == Attributes.Mode.Multiple)
+ mOpenPositions.add(position);
+ else {
+ closeAllExcept(layout);
+ mOpenPosition = position;
+ }
+ }
+
+ public void setPosition(int position){
+ this.position = position;
+ }
+ }
+
+}
diff --git a/library/src/main/java/com/daimajia/swipe/interfaces/SwipeItemMangerInterface.java b/library/src/main/java/com/daimajia/swipe/interfaces/SwipeItemMangerInterface.java
index 1a5e409..b0528b4 100644
--- a/library/src/main/java/com/daimajia/swipe/interfaces/SwipeItemMangerInterface.java
+++ b/library/src/main/java/com/daimajia/swipe/interfaces/SwipeItemMangerInterface.java
@@ -2,6 +2,7 @@ package com.daimajia.swipe.interfaces;
import com.daimajia.swipe.SwipeLayout;
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
+import com.daimajia.swipe.util.Attributes;
import java.util.List;
@@ -21,7 +22,7 @@ public interface SwipeItemMangerInterface {
public boolean isOpen(int position);
- public SwipeItemMangerImpl.Mode getMode();
+ public Attributes.Mode getMode();
- public void setMode(SwipeItemMangerImpl.Mode mode);
+ public void setMode(Attributes.Mode mode);
}
diff --git a/library/src/main/java/com/daimajia/swipe/util/Attributes.java b/library/src/main/java/com/daimajia/swipe/util/Attributes.java
new file mode 100644
index 0000000..697c64a
--- /dev/null
+++ b/library/src/main/java/com/daimajia/swipe/util/Attributes.java
@@ -0,0 +1,9 @@
+package com.daimajia.swipe.util;
+
+
+public class Attributes {
+
+ public enum Mode {
+ Single, Multiple
+ }
+}