(recyclerview, adapter) Initial RecyclerView update.. see details
Added more basic functionaloty to the recycler view activity and more improvements
This commit is contained in:
parent
bd4749188c
commit
a5a2e2c9ea
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue