(recyclerview, adapter) Initial RecyclerView update.. see details

Added more basic functionaloty to the recycler view activity and more improvements
This commit is contained in:
John Shelley 2014-12-18 16:52:53 -06:00
parent bd4749188c
commit a5a2e2c9ea
6 changed files with 92 additions and 73 deletions

View File

@ -1,8 +1,10 @@
package com.daimajia.swipedemo;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
@ -23,11 +25,18 @@ public class ListViewExample extends Activity {
private ListView mListView;
private ListViewAdapter mAdapter;
private Context mContext = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
mListView = (ListView)findViewById(R.id.listview);
mListView = (ListView) findViewById(R.id.listview);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
ActionBar actionBar = getActionBar();
if (actionBar != null) {
actionBar.setTitle("ListView");
}
}
/**
* The following comment is the sample usage of ArraySwipeAdapter.
@ -50,7 +59,7 @@ public class ListViewExample extends Activity {
mListView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("ListView","OnTouch");
Log.e("ListView", "OnTouch");
return false;
}
});
@ -64,7 +73,7 @@ public class ListViewExample extends Activity {
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
Log.e("ListView","onScrollStateChanged");
Log.e("ListView", "onScrollStateChanged");
}
@Override
@ -105,10 +114,14 @@ public class ListViewExample extends Activity {
startActivity(new Intent(this, ListViewExample.class));
finish();
return true;
}else if(id == R.id.action_gridview){
} else if (id == R.id.action_gridview) {
startActivity(new Intent(this, GridViewExample.class));
finish();
return true;
} else if (id == R.id.action_recycler) {
startActivity(new Intent(this, RecyclerViewExample.class));
finish();
return true;
}
return super.onOptionsItemSelected(item);
}

View File

@ -119,7 +119,7 @@ public class MyActivity extends Activity {
} else if (id == R.id.action_recycler) {
startActivity(new Intent(this, RecyclerViewExample.class));
}
return super.onOptionsItemSelected(item);
return super.onOptionsItemSelected(item);
}
/*

View File

@ -1,11 +1,12 @@
package com.daimajia.swipedemo;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.Menu;
@ -15,13 +16,16 @@ import android.view.View;
import android.widget.Toast;
import com.daimajia.swipe.util.Attributes;
import com.daimajia.swipedemo.adapter.RecyclerViewSimpleAdapter;
import com.daimajia.swipedemo.adapter.RecyclerViewAdvancedAdapter;
import org.lucasr.twowayview.ItemClickSupport;
import org.lucasr.twowayview.TwoWayLayoutManager;
import org.lucasr.twowayview.widget.DividerItemDecoration;
import org.lucasr.twowayview.widget.ListLayoutManager;
import java.util.ArrayList;
import java.util.Arrays;
public class RecyclerViewExample extends Activity {
private RecyclerView recyclerView;
@ -30,21 +34,25 @@ public class RecyclerViewExample extends Activity {
// 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;
private Context mContext = this;
private ArrayList<String> mDataSet;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recyclerview);
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
ActionBar actionBar = getActionBar();
if (actionBar != null) {
actionBar.setTitle("RecyclerView");
}
}
/**
* The following comment is the sample usage of ArraySwipeAdapter.
* Sample data.
*/
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"};
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"};
// Uses a ListLayout manager from TwoWayView Lib:
mLayoutManager = new ListLayoutManager(this, TwoWayLayoutManager.Orientation.VERTICAL);
@ -52,9 +60,10 @@ public class RecyclerViewExample extends Activity {
final Drawable divider = getResources().getDrawable(R.drawable.divider);
recyclerView.addItemDecoration(new DividerItemDecoration(divider));
mAdapter = new RecyclerViewSimpleAdapter(this, adapterData);
mDataSet = new ArrayList<String>(Arrays.asList(adapterData));
mAdapter = new RecyclerViewAdvancedAdapter(this, mDataSet);
((RecyclerViewAdvancedAdapter) mAdapter).setMode(Attributes.Mode.Single);
recyclerView.setAdapter(mAdapter);
((RecyclerViewSimpleAdapter) mAdapter).setMode(Attributes.Mode.Single);
/* Listeners */
ItemClickSupport itemClick = ItemClickSupport.addTo(recyclerView);

View File

@ -18,31 +18,31 @@ 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<RecyclerViewSimpleAdapter.ViewHolder> implements SwipeItemMangerInterface, SwipeAdapterInterface {
public class RecyclerViewAdvancedAdapter extends RecyclerView.Adapter<RecyclerViewAdvancedAdapter.ViewHolder> implements SwipeItemMangerInterface, SwipeAdapterInterface {
public static class ViewHolder extends RecyclerView.ViewHolder {
SwipeLayout swipeLayout;
TextView textView;
TextView textViewPos;
TextView textViewData;
public ViewHolder(View itemView) {
super(itemView);
swipeLayout = (SwipeLayout) itemView.findViewById(R.id.swipe);
textView = (TextView) itemView.findViewById(R.id.position);
textViewPos = (TextView) itemView.findViewById(R.id.position);
textViewData = (TextView) itemView.findViewById(R.id.text_data);
}
}
private Context mContext;
private String[] mDataset;
private ArrayList<String> mDataset;
protected SwipeItemRecyclerMangerImpl mItemManger = new SwipeItemRecyclerMangerImpl(this);
public RecyclerViewSimpleAdapter(Context context, String[] objects) {
public RecyclerViewAdvancedAdapter(Context context, ArrayList<String> objects) {
this.mContext = context;
this.mDataset = objects;
}
@ -54,7 +54,8 @@ public class RecyclerViewSimpleAdapter extends RecyclerView.Adapter<RecyclerView
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
viewHolder.swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown);
viewHolder.swipeLayout.addSwipeListener(new SimpleSwipeListener() {
@Override
public void onOpen(SwipeLayout layout) {
@ -67,7 +68,9 @@ public class RecyclerViewSimpleAdapter extends RecyclerView.Adapter<RecyclerView
Toast.makeText(mContext, "DoubleClick", Toast.LENGTH_SHORT).show();
}
});
viewHolder.textView.setText((position + 1) + ".");
viewHolder.textViewPos.setText((position + 1) + ".");
viewHolder.textViewData.setText(mDataset.get(position));
mItemManger.bind(viewHolder.itemView, position);
}
@Override
@ -77,7 +80,7 @@ public class RecyclerViewSimpleAdapter extends RecyclerView.Adapter<RecyclerView
@Override
public int getItemCount() {
return mDataset.length;
return mDataset.size();
}
@Override

View File

@ -54,6 +54,7 @@
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text_data"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="Hover"

View File

@ -31,65 +31,58 @@ public class SwipeItemRecyclerMangerImpl implements SwipeItemMangerInterface {
protected RecyclerView.Adapter mAdapter;
public SwipeItemRecyclerMangerImpl(RecyclerView.Adapter adapter) {
if(adapter == null)
if (adapter == null)
throw new IllegalArgumentException("Adapter can not be null");
if(!(adapter instanceof SwipeItemMangerInterface))
if (!(adapter instanceof SwipeItemMangerInterface))
throw new IllegalArgumentException("adapter should implement the SwipeAdapterInterface");
this.mAdapter = adapter;
}
public Attributes.Mode getMode(){
public Attributes.Mode getMode() {
return mode;
}
public void setMode(Attributes.Mode mode){
public void setMode(Attributes.Mode mode) {
this.mode = mode;
mOpenPositions.clear();
mShownLayouts.clear();
mOpenPosition = INVALID_POSITION;
}
public void initialize(View target, int position) {
public void bind(View target, int position) {
int resId = getSwipeLayoutId(position);
OnLayoutListener onLayoutListener = new OnLayoutListener(position);
SwipeLayout swipeLayout = (SwipeLayout)target.findViewById(resId);
if(swipeLayout == null)
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);
if (swipeLayout.getTag(resId) == null) {
SwipeMemory swipeMemory = new SwipeMemory(position);
swipeLayout.addSwipeListener(swipeMemory);
swipeLayout.addOnLayoutListener(onLayoutListener);
swipeLayout.setTag(resId, new ValueBox(position, swipeMemory, onLayoutListener));
mShownLayouts.add(swipeLayout);
} else {
ValueBox valueBox = (ValueBox) swipeLayout.getTag(resId);
valueBox.swipeMemory.setPosition(position);
valueBox.onLayoutListener.setPosition(position);
valueBox.position = position;
}
}
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);
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))
if (mode == Attributes.Mode.Multiple) {
if (!mOpenPositions.contains(position))
mOpenPositions.add(position);
}else{
} else {
mOpenPosition = position;
}
mAdapter.notifyDataSetChanged();
@ -97,10 +90,10 @@ public class SwipeItemRecyclerMangerImpl implements SwipeItemMangerInterface {
@Override
public void closeItem(int position) {
if(mode == Attributes.Mode.Multiple){
if (mode == Attributes.Mode.Multiple) {
mOpenPositions.remove(position);
}else{
if(mOpenPosition == position)
} else {
if (mOpenPosition == position)
mOpenPosition = INVALID_POSITION;
}
mAdapter.notifyDataSetChanged();
@ -108,8 +101,8 @@ public class SwipeItemRecyclerMangerImpl implements SwipeItemMangerInterface {
@Override
public void closeAllExcept(SwipeLayout layout) {
for(SwipeLayout s : mShownLayouts){
if(s != layout)
for (SwipeLayout s : mShownLayouts) {
if (s != layout)
s.close();
}
}
@ -121,9 +114,9 @@ public class SwipeItemRecyclerMangerImpl implements SwipeItemMangerInterface {
@Override
public List<Integer> getOpenItems() {
if(mode == Attributes.Mode.Multiple){
if (mode == Attributes.Mode.Multiple) {
return new ArrayList<Integer>(mOpenPositions);
}else{
} else {
return Arrays.asList(mOpenPosition);
}
}
@ -135,9 +128,9 @@ public class SwipeItemRecyclerMangerImpl implements SwipeItemMangerInterface {
@Override
public boolean isOpen(int position) {
if(mode == Attributes.Mode.Multiple){
if (mode == Attributes.Mode.Multiple) {
return mOpenPositions.contains(position);
}else{
} else {
return mOpenPosition == position;
}
}
@ -154,7 +147,7 @@ public class SwipeItemRecyclerMangerImpl implements SwipeItemMangerInterface {
}
}
class OnLayoutListener implements SwipeLayout.OnLayout{
class OnLayoutListener implements SwipeLayout.OnLayout {
private int position;
@ -162,15 +155,15 @@ public class SwipeItemRecyclerMangerImpl implements SwipeItemMangerInterface {
this.position = position;
}
public void setPosition(int position){
public void setPosition(int position) {
this.position = position;
}
@Override
public void onLayout(SwipeLayout v) {
if(isOpen(position)){
if (isOpen(position)) {
v.open(false, false);
}else{
} else {
v.close(false, false);
}
}
@ -187,16 +180,16 @@ public class SwipeItemRecyclerMangerImpl implements SwipeItemMangerInterface {
@Override
public void onClose(SwipeLayout layout) {
if(mode == Attributes.Mode.Multiple){
if (mode == Attributes.Mode.Multiple) {
mOpenPositions.remove(position);
}else{
} else {
mOpenPosition = INVALID_POSITION;
}
}
@Override
public void onStartOpen(SwipeLayout layout) {
if(mode == Attributes.Mode.Single) {
if (mode == Attributes.Mode.Single) {
closeAllExcept(layout);
}
}
@ -211,7 +204,7 @@ public class SwipeItemRecyclerMangerImpl implements SwipeItemMangerInterface {
}
}
public void setPosition(int position){
public void setPosition(int position) {
this.position = position;
}
}