Skip to content

Commit bd47491

Browse files
committed
(demo, recyclerview) Update demo.. see details ->
Demo now includes the most simple form or using a recycler view in the codebase currently. Next step would be to create a more simplified approach at a RecyclerViewSwipeAdapter that a user can extend from and only implement smaller methods instead of all the implementations.
1 parent 25e38f3 commit bd47491

20 files changed

+638
-70
lines changed

demo/build.gradle

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
apply plugin: 'com.android.application'
22

3+
repositories {
4+
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
5+
}
6+
37
android {
48
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)
59
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
@@ -21,8 +25,10 @@ android {
2125

2226
dependencies {
2327
compile project(":library")
24-
compile 'com.nineoldandroids:library:2.4.0'
28+
compile 'com.android.support:recyclerview-v7:21.0.0'
2529
compile 'com.daimajia.easing:library:1.0.0@aar'
2630
compile 'com.daimajia.androidanimations:library:1.1.2@aar'
2731
compile 'com.nineoldandroids:library:2.4.0'
32+
compile 'org.lucasr.twowayview:core:1.0.0-SNAPSHOT@aar'
33+
compile 'org.lucasr.twowayview:layouts:1.0.0-SNAPSHOT@aar'
2834
}

demo/src/main/AndroidManifest.xml

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,28 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3-
package="com.daimajia.swipedemo" >
3+
xmlns:tools="http://schemas.android.com/tools"
4+
package="com.daimajia.swipedemo">
5+
6+
<uses-sdk tools:overrideLibrary="org.lucasr.twowayview, org.lucasr.twowayview.widget" />
47

58
<application
69
android:allowBackup="true"
710
android:icon="@drawable/ic_launcher"
811
android:label="@string/app_name"
9-
android:theme="@style/AppTheme" >
12+
android:theme="@style/AppTheme">
1013
<activity
1114
android:name="com.daimajia.swipedemo.MyActivity"
12-
android:label="@string/app_name" >
15+
android:label="@string/app_name">
1316
<intent-filter>
1417
<action android:name="android.intent.action.MAIN" />
1518

1619
<category android:name="android.intent.category.LAUNCHER" />
1720
</intent-filter>
1821
</activity>
19-
<activity android:name="com.daimajia.swipedemo.ListViewExample"/>
20-
<activity android:name="com.daimajia.swipedemo.GridViewExample"/>
21-
<activity android:name=".NestedExample"/>
22+
<activity android:name="com.daimajia.swipedemo.ListViewExample" />
23+
<activity android:name="com.daimajia.swipedemo.GridViewExample" />
24+
<activity android:name="com.daimajia.swipedemo.RecyclerViewExample" />
25+
<activity android:name=".NestedExample" />
2226
</application>
2327

2428
</manifest>

demo/src/main/java/com/daimajia/swipedemo/GridViewExample.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import android.widget.GridView;
99

1010
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
11+
import com.daimajia.swipe.util.Attributes;
1112
import com.daimajia.swipedemo.adapter.GridViewAdapter;
1213

1314
public class GridViewExample extends Activity{
@@ -18,7 +19,7 @@ protected void onCreate(Bundle savedInstanceState) {
1819
setContentView(R.layout.gridview);
1920
final GridView gridView = (GridView)findViewById(R.id.gridview);
2021
final GridViewAdapter adapter = new GridViewAdapter(this);
21-
adapter.setMode(SwipeItemMangerImpl.Mode.Multiple);
22+
adapter.setMode(Attributes.Mode.Multiple);
2223
gridView.setAdapter(adapter);
2324
gridView.setSelected(false);
2425
gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

demo/src/main/java/com/daimajia/swipedemo/ListViewExample.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import android.widget.Toast;
1616

1717
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
18+
import com.daimajia.swipe.util.Attributes;
1819
import com.daimajia.swipedemo.adapter.ListViewAdapter;
1920

2021
public class ListViewExample extends Activity {
@@ -39,7 +40,7 @@ protected void onCreate(Bundle savedInstanceState) {
3940

4041
mAdapter = new ListViewAdapter(this);
4142
mListView.setAdapter(mAdapter);
42-
mAdapter.setMode(SwipeItemMangerImpl.Mode.Single);
43+
mAdapter.setMode(Attributes.Mode.Single);
4344
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
4445
@Override
4546
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

demo/src/main/java/com/daimajia/swipedemo/MyActivity.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,13 @@ public boolean onOptionsItemSelected(MenuItem item) {
113113
} else if (id == R.id.action_gridview) {
114114
startActivity(new Intent(this, GridViewExample.class));
115115
return true;
116-
} else if(id == R.id.action_nexted){
116+
} else if (id == R.id.action_nested) {
117117
startActivity(new Intent(this, NestedExample.class));
118118
return true;
119+
} else if (id == R.id.action_recycler) {
120+
startActivity(new Intent(this, RecyclerViewExample.class));
119121
}
120-
return super.onOptionsItemSelected(item);
122+
return super.onOptionsItemSelected(item);
121123
}
122124

123125
/*
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
package com.daimajia.swipedemo;
2+
3+
import android.app.Activity;
4+
import android.content.Context;
5+
import android.content.Intent;
6+
import android.graphics.drawable.Drawable;
7+
import android.os.Bundle;
8+
import android.support.v7.widget.LinearLayoutManager;
9+
import android.support.v7.widget.RecyclerView;
10+
import android.util.Log;
11+
import android.view.Menu;
12+
import android.view.MenuItem;
13+
import android.view.MotionEvent;
14+
import android.view.View;
15+
import android.widget.Toast;
16+
17+
import com.daimajia.swipe.util.Attributes;
18+
import com.daimajia.swipedemo.adapter.RecyclerViewSimpleAdapter;
19+
20+
import org.lucasr.twowayview.ItemClickSupport;
21+
import org.lucasr.twowayview.TwoWayLayoutManager;
22+
import org.lucasr.twowayview.widget.DividerItemDecoration;
23+
import org.lucasr.twowayview.widget.ListLayoutManager;
24+
25+
public class RecyclerViewExample extends Activity {
26+
27+
private RecyclerView recyclerView;
28+
private RecyclerView.Adapter mAdapter;
29+
// RecyclerView.LayoutManager: https://developer.android.com/reference/android/support/v7/widget/RecyclerView.LayoutManager.html
30+
// Our LayoutManager uses: https://github.com/lucasr/twoway-view to help with decoration and can be used for a more advanced config as well.
31+
// Read http://lucasr.org/2014/07/31/the-new-twowayview/ for a better understanding
32+
private RecyclerView.LayoutManager mLayoutManager;
33+
private Context mContext = this;
34+
35+
@Override
36+
protected void onCreate(Bundle savedInstanceState) {
37+
super.onCreate(savedInstanceState);
38+
setContentView(R.layout.recyclerview);
39+
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
40+
41+
/**
42+
* The following comment is the sample usage of ArraySwipeAdapter.
43+
*/
44+
String[] adapterData = new String[]{"Activity", "Service", "Content Provider", "Intent", "BroadcastReceiver", "ADT", "Sqlite3", "HttpClient",
45+
"DDMS", "Android Studio", "Fragment", "Loader", "Activity", "Service", "Content Provider", "Intent",
46+
"BroadcastReceiver", "ADT", "Sqlite3", "HttpClient", "Activity", "Service", "Content Provider", "Intent",
47+
"BroadcastReceiver", "ADT", "Sqlite3", "HttpClient"};
48+
49+
// Uses a ListLayout manager from TwoWayView Lib:
50+
mLayoutManager = new ListLayoutManager(this, TwoWayLayoutManager.Orientation.VERTICAL);
51+
recyclerView.setLayoutManager(mLayoutManager);
52+
final Drawable divider = getResources().getDrawable(R.drawable.divider);
53+
recyclerView.addItemDecoration(new DividerItemDecoration(divider));
54+
55+
mAdapter = new RecyclerViewSimpleAdapter(this, adapterData);
56+
recyclerView.setAdapter(mAdapter);
57+
((RecyclerViewSimpleAdapter) mAdapter).setMode(Attributes.Mode.Single);
58+
59+
/* Listeners */
60+
ItemClickSupport itemClick = ItemClickSupport.addTo(recyclerView);
61+
itemClick.setOnItemClickListener(onItemClickListener);
62+
recyclerView.setOnTouchListener(new View.OnTouchListener() {
63+
@Override
64+
public boolean onTouch(View v, MotionEvent event) {
65+
Log.e("ListView", "OnTouch");
66+
return false;
67+
}
68+
});
69+
recyclerView.setOnScrollListener(onScrollListener);
70+
71+
// TODO: Item Long Click is firing for every touch.
72+
// itemClick.setOnItemLongClickListener(onItemLongClickListener);
73+
74+
// TODO: Item Selection Support for RecyclerView
75+
// recyclerView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
76+
// @Override
77+
// public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
78+
// Log.e("ListView", "onItemSelected:" + position);
79+
// }
80+
//
81+
// @Override
82+
// public void onNothingSelected(AdapterView<?> parent) {
83+
// Log.e("ListView", "onNothingSelected:");
84+
// }
85+
// });
86+
87+
}
88+
89+
/**
90+
* Substitute for our onItemClick listener for RecyclerView
91+
*/
92+
ItemClickSupport.OnItemClickListener onItemClickListener = new ItemClickSupport.OnItemClickListener() {
93+
@Override
94+
public void onItemClick(RecyclerView parent, View child, int position, long id) {
95+
Toast.makeText(mContext, "Clicked:" + position, Toast.LENGTH_SHORT).show();
96+
}
97+
};
98+
99+
/**
100+
* Substitute for our onItemLongClick listener for RecyclerView
101+
*/
102+
ItemClickSupport.OnItemLongClickListener onItemLongClickListener = new ItemClickSupport.OnItemLongClickListener() {
103+
@Override
104+
public boolean onItemLongClick(RecyclerView recyclerView, View view, int position, long id) {
105+
Toast.makeText(mContext, "OnItemLongClickListener:" + position, Toast.LENGTH_SHORT).show();
106+
return false;
107+
}
108+
};
109+
110+
/**
111+
* Substitute for our onScrollListener for RecyclerView
112+
*/
113+
RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
114+
@Override
115+
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
116+
super.onScrollStateChanged(recyclerView, newState);
117+
Log.e("ListView", "onScrollStateChanged");
118+
}
119+
120+
@Override
121+
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
122+
super.onScrolled(recyclerView, dx, dy);
123+
}
124+
};
125+
126+
127+
@Override
128+
public boolean onCreateOptionsMenu(Menu menu) {
129+
// Inflate the menu; this adds items to the action bar if it is present.
130+
getMenuInflater().inflate(R.menu.my, menu);
131+
return true;
132+
}
133+
134+
@Override
135+
public boolean onOptionsItemSelected(MenuItem item) {
136+
// Handle action bar item clicks here. The action bar will
137+
// automatically handle clicks on the Home/Up button, so long
138+
// as you specify a parent activity in AndroidManifest.xml.
139+
int id = item.getItemId();
140+
if (id == R.id.action_listview) {
141+
startActivity(new Intent(this, ListViewExample.class));
142+
finish();
143+
return true;
144+
} else if (id == R.id.action_gridview) {
145+
startActivity(new Intent(this, GridViewExample.class));
146+
finish();
147+
return true;
148+
}
149+
return super.onOptionsItemSelected(item);
150+
}
151+
}
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
package com.daimajia.swipedemo.adapter;
2+
3+
import android.content.Context;
4+
import android.support.v7.widget.RecyclerView;
5+
import android.view.LayoutInflater;
6+
import android.view.View;
7+
import android.view.ViewGroup;
8+
import android.widget.TextView;
9+
import android.widget.Toast;
10+
11+
import com.daimajia.androidanimations.library.Techniques;
12+
import com.daimajia.androidanimations.library.YoYo;
13+
import com.daimajia.swipe.SimpleSwipeListener;
14+
import com.daimajia.swipe.SwipeLayout;
15+
import com.daimajia.swipe.implments.SwipeItemRecyclerMangerImpl;
16+
import com.daimajia.swipe.interfaces.SwipeAdapterInterface;
17+
import com.daimajia.swipe.interfaces.SwipeItemMangerInterface;
18+
import com.daimajia.swipe.util.Attributes;
19+
import com.daimajia.swipedemo.R;
20+
21+
import java.lang.reflect.Array;
22+
import java.util.ArrayList;
23+
import java.util.List;
24+
import java.util.Objects;
25+
26+
public class RecyclerViewSimpleAdapter extends RecyclerView.Adapter<RecyclerViewSimpleAdapter.ViewHolder> implements SwipeItemMangerInterface, SwipeAdapterInterface {
27+
28+
public static class ViewHolder extends RecyclerView.ViewHolder {
29+
SwipeLayout swipeLayout;
30+
TextView textView;
31+
32+
public ViewHolder(View itemView) {
33+
super(itemView);
34+
swipeLayout = (SwipeLayout) itemView.findViewById(R.id.swipe);
35+
textView = (TextView) itemView.findViewById(R.id.position);
36+
}
37+
}
38+
39+
private Context mContext;
40+
private String[] mDataset;
41+
42+
protected SwipeItemRecyclerMangerImpl mItemManger = new SwipeItemRecyclerMangerImpl(this);
43+
44+
45+
public RecyclerViewSimpleAdapter(Context context, String[] objects) {
46+
this.mContext = context;
47+
this.mDataset = objects;
48+
}
49+
50+
@Override
51+
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
52+
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listview_item, parent, false);
53+
return new ViewHolder(view);
54+
}
55+
56+
@Override
57+
public void onBindViewHolder(ViewHolder viewHolder, int position) {
58+
viewHolder.swipeLayout.addSwipeListener(new SimpleSwipeListener() {
59+
@Override
60+
public void onOpen(SwipeLayout layout) {
61+
YoYo.with(Techniques.Tada).duration(500).delay(100).playOn(layout.findViewById(R.id.trash));
62+
}
63+
});
64+
viewHolder.swipeLayout.setOnDoubleClickListener(new SwipeLayout.DoubleClickListener() {
65+
@Override
66+
public void onDoubleClick(SwipeLayout layout, boolean surface) {
67+
Toast.makeText(mContext, "DoubleClick", Toast.LENGTH_SHORT).show();
68+
}
69+
});
70+
viewHolder.textView.setText((position + 1) + ".");
71+
}
72+
73+
@Override
74+
public long getItemId(int position) {
75+
return position;
76+
}
77+
78+
@Override
79+
public int getItemCount() {
80+
return mDataset.length;
81+
}
82+
83+
@Override
84+
public void openItem(int position) {
85+
mItemManger.openItem(position);
86+
}
87+
88+
@Override
89+
public void closeItem(int position) {
90+
mItemManger.closeItem(position);
91+
}
92+
93+
@Override
94+
public void closeAllExcept(SwipeLayout layout) {
95+
mItemManger.closeAllExcept(layout);
96+
}
97+
98+
@Override
99+
public List<Integer> getOpenItems() {
100+
return mItemManger.getOpenItems();
101+
}
102+
103+
@Override
104+
public List<SwipeLayout> getOpenLayouts() {
105+
return mItemManger.getOpenLayouts();
106+
}
107+
108+
@Override
109+
public void removeShownLayouts(SwipeLayout layout) {
110+
mItemManger.removeShownLayouts(layout);
111+
}
112+
113+
@Override
114+
public boolean isOpen(int position) {
115+
return mItemManger.isOpen(position);
116+
}
117+
118+
@Override
119+
public Attributes.Mode getMode() {
120+
return mItemManger.getMode();
121+
}
122+
123+
@Override
124+
public void setMode(Attributes.Mode mode) {
125+
mItemManger.setMode(mode);
126+
}
127+
128+
@Override
129+
public int getSwipeLayoutResourceId(int position) {
130+
return R.id.swipe;
131+
}
132+
}

0 commit comments

Comments
 (0)