Skip to content

Commit c739b4b

Browse files
committed
Merge branch 'jpshelley-create_recycler_adapter'
2 parents a92a2cd + da7084c commit c739b4b

27 files changed

+891
-127
lines changed

demo/build.gradle

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

3+
repositories {
4+
jcenter()
5+
}
6+
37
android {
48
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)
59
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
@@ -20,8 +24,10 @@ android {
2024

2125
dependencies {
2226
compile project(":library")
23-
compile 'com.nineoldandroids:library:2.4.0'
27+
compile 'com.android.support:recyclerview-v7:21.0.0'
2428
compile 'com.daimajia.easing:library:1.0.0@aar'
2529
compile 'com.daimajia.androidanimations:library:1.1.2@aar'
2630
compile 'com.nineoldandroids:library:2.4.0'
31+
// This dude gave a shoutout to you (daimajia) on his github page:
32+
compile 'jp.wasabeef:recyclerview-animators:1.0.3@aar'
2733
}

demo/src/main/AndroidManifest.xml

+10-6
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, jp.wasabeef.recyclerview" />
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

+2-1
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

+19-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.daimajia.swipedemo;
22

3+
import android.app.ActionBar;
34
import android.app.Activity;
45
import android.content.Context;
56
import android.content.Intent;
7+
import android.os.Build;
68
import android.os.Bundle;
79
import android.util.Log;
810
import android.view.Menu;
@@ -16,18 +18,26 @@
1618

1719
import com.daimajia.swipe.SwipeLayout;
1820
import com.daimajia.swipe.implments.SwipeItemMangerImpl;
21+
import com.daimajia.swipe.util.Attributes;
1922
import com.daimajia.swipedemo.adapter.ListViewAdapter;
2023

2124
public class ListViewExample extends Activity {
2225

2326
private ListView mListView;
2427
private ListViewAdapter mAdapter;
2528
private Context mContext = this;
29+
2630
@Override
2731
protected void onCreate(Bundle savedInstanceState) {
2832
super.onCreate(savedInstanceState);
2933
setContentView(R.layout.listview);
30-
mListView = (ListView)findViewById(R.id.listview);
34+
mListView = (ListView) findViewById(R.id.listview);
35+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
36+
ActionBar actionBar = getActionBar();
37+
if (actionBar != null) {
38+
actionBar.setTitle("ListView");
39+
}
40+
}
3141

3242
/**
3343
* The following comment is the sample usage of ArraySwipeAdapter.
@@ -40,7 +50,7 @@ protected void onCreate(Bundle savedInstanceState) {
4050

4151
mAdapter = new ListViewAdapter(this);
4252
mListView.setAdapter(mAdapter);
43-
mAdapter.setMode(SwipeItemMangerImpl.Mode.Single);
53+
mAdapter.setMode(Attributes.Mode.Single);
4454
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
4555
@Override
4656
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
@@ -50,7 +60,7 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
5060
mListView.setOnTouchListener(new View.OnTouchListener() {
5161
@Override
5262
public boolean onTouch(View v, MotionEvent event) {
53-
Log.e("ListView","OnTouch");
63+
Log.e("ListView", "OnTouch");
5464
return false;
5565
}
5666
});
@@ -64,7 +74,7 @@ public boolean onItemLongClick(AdapterView<?> parent, View view, int position, l
6474
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
6575
@Override
6676
public void onScrollStateChanged(AbsListView view, int scrollState) {
67-
Log.e("ListView","onScrollStateChanged");
77+
Log.e("ListView", "onScrollStateChanged");
6878
}
6979

7080
@Override
@@ -105,10 +115,14 @@ public boolean onOptionsItemSelected(MenuItem item) {
105115
startActivity(new Intent(this, ListViewExample.class));
106116
finish();
107117
return true;
108-
}else if(id == R.id.action_gridview){
118+
} else if (id == R.id.action_gridview) {
109119
startActivity(new Intent(this, GridViewExample.class));
110120
finish();
111121
return true;
122+
} else if (id == R.id.action_recycler) {
123+
startActivity(new Intent(this, RecyclerViewExample.class));
124+
finish();
125+
return true;
112126
}
113127
return super.onOptionsItemSelected(item);
114128
}

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,11 @@ 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
}
120122
return super.onOptionsItemSelected(item);
121123
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package com.daimajia.swipedemo;
2+
3+
import android.app.ActionBar;
4+
import android.app.Activity;
5+
import android.content.Context;
6+
import android.content.Intent;
7+
import android.os.Build;
8+
import android.os.Bundle;
9+
import android.support.v7.widget.LinearLayoutManager;
10+
import android.support.v7.widget.RecyclerView;
11+
import android.util.Log;
12+
import android.view.Menu;
13+
import android.view.MenuItem;
14+
15+
import com.daimajia.swipe.util.Attributes;
16+
import com.daimajia.swipedemo.adapter.RecyclerViewAdapter;
17+
import com.daimajia.swipedemo.adapter.util.DividerItemDecoration;
18+
19+
import java.util.ArrayList;
20+
import java.util.Arrays;
21+
22+
import jp.wasabeef.recyclerview.animators.FadeInLeftAnimator;
23+
24+
public class RecyclerViewExample extends Activity {
25+
26+
/**
27+
* RecyclerView: The new recycler view replaces the list view. Its more modular and therefore we
28+
* must implement some of the functionality ourselves and attach it to our recyclerview.
29+
* <p/>
30+
* 1) Position items on the screen: This is done with LayoutManagers
31+
* 2) Animate & Decorate views: This is done with ItemAnimators & ItemDecorators
32+
* 3) Handle any touch events apart from scrolling: This is now done in our adapter's ViewHolder
33+
*/
34+
35+
private RecyclerView recyclerView;
36+
private RecyclerView.Adapter mAdapter;
37+
38+
private ArrayList<String> mDataSet;
39+
40+
@Override
41+
protected void onCreate(Bundle savedInstanceState) {
42+
super.onCreate(savedInstanceState);
43+
setContentView(R.layout.recyclerview);
44+
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
45+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
46+
ActionBar actionBar = getActionBar();
47+
if (actionBar != null) {
48+
actionBar.setTitle("RecyclerView");
49+
}
50+
}
51+
52+
// Layout Managers:
53+
recyclerView.setLayoutManager(new LinearLayoutManager(this));
54+
55+
// Item Decorator:
56+
recyclerView.addItemDecoration(new DividerItemDecoration(getResources().getDrawable(R.drawable.divider)));
57+
recyclerView.setItemAnimator(new FadeInLeftAnimator());
58+
59+
// Adapter:
60+
String[] adapterData = new String[]{"Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"};
61+
mDataSet = new ArrayList<String>(Arrays.asList(adapterData));
62+
mAdapter = new RecyclerViewAdapter(this, mDataSet);
63+
((RecyclerViewAdapter) mAdapter).setMode(Attributes.Mode.Single);
64+
recyclerView.setAdapter(mAdapter);
65+
66+
/* Listeners */
67+
recyclerView.setOnScrollListener(onScrollListener);
68+
}
69+
70+
/**
71+
* Substitute for our onScrollListener for RecyclerView
72+
*/
73+
RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
74+
@Override
75+
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
76+
super.onScrollStateChanged(recyclerView, newState);
77+
Log.e("ListView", "onScrollStateChanged");
78+
}
79+
80+
@Override
81+
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
82+
super.onScrolled(recyclerView, dx, dy);
83+
// Could hide open views here if you wanted. //
84+
}
85+
};
86+
87+
88+
@Override
89+
public boolean onCreateOptionsMenu(Menu menu) {
90+
// Inflate the menu; this adds items to the action bar if it is present.
91+
getMenuInflater().inflate(R.menu.my, menu);
92+
return true;
93+
}
94+
95+
@Override
96+
public boolean onOptionsItemSelected(MenuItem item) {
97+
// Handle action bar item clicks here. The action bar will
98+
// automatically handle clicks on the Home/Up button, so long
99+
// as you specify a parent activity in AndroidManifest.xml.
100+
int id = item.getItemId();
101+
if (id == R.id.action_listview) {
102+
startActivity(new Intent(this, ListViewExample.class));
103+
finish();
104+
return true;
105+
} else if (id == R.id.action_gridview) {
106+
startActivity(new Intent(this, GridViewExample.class));
107+
finish();
108+
return true;
109+
}
110+
return super.onOptionsItemSelected(item);
111+
}
112+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package com.daimajia.swipedemo.adapter;
2+
3+
import android.content.Context;
4+
import android.support.v7.widget.RecyclerView;
5+
import android.util.Log;
6+
import android.view.LayoutInflater;
7+
import android.view.View;
8+
import android.view.ViewGroup;
9+
import android.widget.Button;
10+
import android.widget.TextView;
11+
import android.widget.Toast;
12+
13+
import com.daimajia.androidanimations.library.Techniques;
14+
import com.daimajia.androidanimations.library.YoYo;
15+
import com.daimajia.swipe.SimpleSwipeListener;
16+
import com.daimajia.swipe.SwipeLayout;
17+
import com.daimajia.swipe.adapters.RecyclerSwipeAdapter;
18+
import com.daimajia.swipe.implments.SwipeItemRecyclerMangerImpl;
19+
import com.daimajia.swipedemo.R;
20+
21+
import java.util.ArrayList;
22+
23+
public class RecyclerViewAdapter extends RecyclerSwipeAdapter<RecyclerViewAdapter.SimpleViewHolder> {
24+
25+
public static class SimpleViewHolder extends RecyclerView.ViewHolder {
26+
SwipeLayout swipeLayout;
27+
TextView textViewPos;
28+
TextView textViewData;
29+
Button buttonDelete;
30+
31+
public SimpleViewHolder(View itemView) {
32+
super(itemView);
33+
swipeLayout = (SwipeLayout) itemView.findViewById(R.id.swipe);
34+
textViewPos = (TextView) itemView.findViewById(R.id.position);
35+
textViewData = (TextView) itemView.findViewById(R.id.text_data);
36+
buttonDelete = (Button) itemView.findViewById(R.id.delete);
37+
38+
itemView.setOnClickListener(new View.OnClickListener() {
39+
@Override
40+
public void onClick(View view) {
41+
Log.d(getClass().getSimpleName(), "onItemSelected: " + textViewData.getText().toString());
42+
Toast.makeText(view.getContext(), "onItemSelected: " + textViewData.getText().toString(), Toast.LENGTH_SHORT).show();
43+
}
44+
});
45+
}
46+
}
47+
48+
private Context mContext;
49+
private ArrayList<String> mDataset;
50+
51+
//protected SwipeItemRecyclerMangerImpl mItemManger = new SwipeItemRecyclerMangerImpl(this);
52+
53+
public RecyclerViewAdapter(Context context, ArrayList<String> objects) {
54+
this.mContext = context;
55+
this.mDataset = objects;
56+
}
57+
58+
@Override
59+
public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
60+
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item, parent, false);
61+
return new SimpleViewHolder(view);
62+
}
63+
64+
@Override
65+
public void onBindViewHolder(final SimpleViewHolder viewHolder, final int position) {
66+
String item = mDataset.get(position);
67+
viewHolder.swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown);
68+
viewHolder.swipeLayout.addSwipeListener(new SimpleSwipeListener() {
69+
@Override
70+
public void onOpen(SwipeLayout layout) {
71+
YoYo.with(Techniques.Tada).duration(500).delay(100).playOn(layout.findViewById(R.id.trash));
72+
}
73+
});
74+
viewHolder.swipeLayout.setOnDoubleClickListener(new SwipeLayout.DoubleClickListener() {
75+
@Override
76+
public void onDoubleClick(SwipeLayout layout, boolean surface) {
77+
Toast.makeText(mContext, "DoubleClick", Toast.LENGTH_SHORT).show();
78+
}
79+
});
80+
viewHolder.buttonDelete.setOnClickListener(new View.OnClickListener() {
81+
@Override
82+
public void onClick(View view) {
83+
mItemManger.removeShownLayouts(viewHolder.swipeLayout);
84+
mDataset.remove(position);
85+
notifyItemRemoved(position);
86+
notifyItemRangeChanged(position, mDataset.size());
87+
mItemManger.closeAllItems();
88+
Toast.makeText(view.getContext(), "Deleted " + viewHolder.textViewData.getText().toString() + "!", Toast.LENGTH_SHORT).show();
89+
}
90+
});
91+
viewHolder.textViewPos.setText((position + 1) + ".");
92+
viewHolder.textViewData.setText(item);
93+
mItemManger.bindView(viewHolder.itemView, position);
94+
}
95+
96+
@Override
97+
public int getItemCount() {
98+
return mDataset.size();
99+
}
100+
101+
@Override
102+
public int getSwipeLayoutResourceId(int position) {
103+
return R.id.swipe;
104+
}
105+
}

0 commit comments

Comments
 (0)