Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@
.DS_Store
/build
/captures
.idea
2 changes: 1 addition & 1 deletion .idea/.name

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 17 additions & 2 deletions app/src/main/java/za/co/retrorabbit/snaprecycler/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;
Expand All @@ -19,6 +21,8 @@ public class MainActivity extends AppCompatActivity {

RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private ListView listview;
private ListAdapter adapterList;

@Override
protected void onCreate(Bundle savedInstanceState) {
Expand All @@ -30,10 +34,17 @@ protected void onCreate(Bundle savedInstanceState) {
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
if (recyclerView != null) {
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(getAdapter());
recyclerView.setAdapter(getAdapterRecycler());
recyclerView.getAdapter().notifyDataSetChanged();
SnapListUtil.addSnapLayoutManager(recyclerView, SnapListUtil.LayoutManagerType.LINEAR, RecyclerView.VERTICAL, false);
}

listview = (ListView) findViewById(R.id.listview);
if (listview != null) {
listview.setAdapter(getAdapterList());
SnapListUtil.addSnapLayoutManager(listview, SnapListUtil.LayoutManagerType.LINEAR, RecyclerView.VERTICAL, false);
}

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
if (fab != null)
fab.setOnClickListener(new View.OnClickListener() {
Expand Down Expand Up @@ -67,7 +78,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}

public ThingRecyclerAdapter getAdapter() {
public ThingRecyclerAdapter getAdapterRecycler() {
return new ThingRecyclerAdapter(getThings());
}

Expand All @@ -78,4 +89,8 @@ public static List<Thing> getThings() {
}
return list;
}

public ListAdapter getAdapterList() {
return new ThingListAdapter(this,R.layout.list_item,getThings());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package za.co.retrorabbit.snaprecycler;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.HashMap;
import java.util.List;

/**
* Created by wsche on 2016/06/03.
*/
public class ThingListAdapter extends ArrayAdapter<Thing> {
HashMap<Thing, Integer> mIdMap = new HashMap<Thing, Integer>();

public ThingListAdapter(Context context, int textViewResourceId,
List<Thing> objects) {
super(context, textViewResourceId, objects);
for (int i = 0; i < objects.size(); ++i) {
mIdMap.put(objects.get(i), i);
}
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ThingViewHolder holder;
if (convertView == null) {
holder = new ThingViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, null, false));
convertView = holder.itemView;
convertView.setTag(holder);
} else {
holder = (ThingViewHolder) convertView.getTag();
convertView = holder.itemView;
}
holder.populate(getItem(position));
return convertView;
}

@Override
public long getItemId(int position) {
Thing item = getItem(position);
return mIdMap.get(item);
}

@Override
public boolean hasStableIds() {
return true;
}

public class ThingViewHolder {

ImageView imageView;
TextView titleTextView;
public View itemView;

public ThingViewHolder(View itemView) {
this.itemView = itemView;
imageView = (ImageView) itemView.findViewById(R.id.imageview);
titleTextView = (TextView) itemView.findViewById(R.id.textview);
}

public void populate(Thing item) {
imageView.setImageResource(item.imageResource);
titleTextView.setText(item.text);
}
}
}
10 changes: 9 additions & 1 deletion app/src/main/res/layout/content_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,22 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorAccent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="za.co.retrorabbit.snaprecycler.MainActivity"
android:background="@color/colorAccent"
tools:showIn="@layout/activity_main">

<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:visibility="gone"
android:layout_height="match_parent"
tools:listitem="@layout/list_item" />

<ListView
android:id="@+id/listview"
android:layout_below="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/list_item" />
</RelativeLayout>
2 changes: 1 addition & 1 deletion snaplistutil/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ android {
buildToolsVersion "23.0.3"

defaultConfig {
minSdkVersion 7
minSdkVersion 8
targetSdkVersion 23
versionCode 1
versionName "0.0.1"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import android.support.v7.widget.LinearSmoothScroller;
import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics;
import android.widget.AbsListView;
import android.widget.ListView;

/**
* Created by wsche on 2016/06/03.
Expand Down Expand Up @@ -79,6 +81,56 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
}
}

public static void addSnapLayoutManager(ListView listView, LayoutManagerType layoutManagerType, int orientation, boolean reversed) {
switch (layoutManagerType) {
case LINEAR:
listView.setOnScrollListener(new ListView.OnScrollListener() {
Direction direction = Direction.DOWN;
private int mLastFirstVisibleItem = 0;

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
// ((SmoothLinearLayoutManager) recyclerView.getLayoutManager()).setMPI(25f);
break;
case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:

//layoutManager.setMPI(150f);
//if (layoutManager.findFirstCompletelyVisibleItemPosition() != layoutManager.findFirstVisibleItemPosition()) {

switch (direction) {
case DOWN:
view.smoothScrollToPosition(view.getLastVisiblePosition());
break;
case UP:
view.smoothScrollToPosition(view.getFirstVisiblePosition());
break;
}
//}
break;
}
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (mLastFirstVisibleItem < firstVisibleItem) {
// Recycle view scrolling down...
direction = Direction.DOWN;
}
if (mLastFirstVisibleItem > firstVisibleItem) {
// Recycle view scrolling up...
direction = Direction.UP;
}
mLastFirstVisibleItem = firstVisibleItem;
}

});
break;
}
}

private enum Direction {
UP,
DOWN
Expand Down