am 4718dfa4: am 864b97ae: am 6001125a: Merge "Updated recycler view demo with smooth scrolling" into klp-modular-dev
* commit '4718dfa473d9ee9259716c400ee79961c230eb15': Updated recycler view demo with smooth scrolling
This commit is contained in:
@@ -17,15 +17,34 @@
|
|||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
<Spinner
|
<LinearLayout
|
||||||
android:layout_width="wrap_content"
|
android:orientation="horizontal"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:id="@+id/spinner"/>
|
android:layout_height="wrap_content">
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/scroll_offset"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:inputType="numberSigned"
|
||||||
|
android:hint="offset"/>
|
||||||
|
<Spinner
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/spinner"/>
|
||||||
|
<CheckBox
|
||||||
|
android:id="@+id/enable_smooth_scroll"
|
||||||
|
android:text="smooth scroll"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<android.support.v7.widget.RecyclerView
|
<android.support.v7.widget.RecyclerView
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="100dp"
|
android:layout_height="60dp"
|
||||||
|
android:scrollbars="horizontal"
|
||||||
android:id="@+id/config_recycler_view"/>
|
android:id="@+id/config_recycler_view"/>
|
||||||
<android.support.v7.widget.RecyclerView
|
<android.support.v7.widget.RecyclerView
|
||||||
|
android:background="#ff0099cc"
|
||||||
android:scrollbarStyle="insideOverlay"
|
android:scrollbarStyle="insideOverlay"
|
||||||
android:scrollbars="horizontal|vertical"
|
android:scrollbars="horizontal|vertical"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
|
|||||||
@@ -25,16 +25,13 @@ import android.os.Bundle;
|
|||||||
import android.support.v4.view.ViewCompat;
|
import android.support.v4.view.ViewCompat;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.util.DisplayMetrics;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
|
||||||
import android.widget.BaseAdapter;
|
import android.widget.BaseAdapter;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.EditText;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
@@ -45,7 +42,9 @@ import com.example.android.supportv7.R;
|
|||||||
*/
|
*/
|
||||||
public class LinearLayoutManagerActivity extends Activity {
|
public class LinearLayoutManagerActivity extends Activity {
|
||||||
|
|
||||||
private LinearLayoutManager mListLayoutManager;
|
private RecyclerView.LayoutManager mListLayoutManager;
|
||||||
|
|
||||||
|
private ListWrapper mListWrapper;
|
||||||
|
|
||||||
private RecyclerView mRecyclerView;
|
private RecyclerView mRecyclerView;
|
||||||
|
|
||||||
@@ -67,9 +66,68 @@ public class LinearLayoutManagerActivity extends Activity {
|
|||||||
mRecyclerView.setHasFixedSize(true);
|
mRecyclerView.setHasFixedSize(true);
|
||||||
mListLayoutManager = new LinearLayoutManager(this);
|
mListLayoutManager = new LinearLayoutManager(this);
|
||||||
mRecyclerView.setLayoutManager(mListLayoutManager);
|
mRecyclerView.setLayoutManager(mListLayoutManager);
|
||||||
mRecyclerView.setAdapter(new SimpleStringAdapter(this, Cheeses.sCheeseStrings));
|
mRecyclerView.setAdapter(new SimpleStringAdapter(this, Cheeses.sCheeseStrings) {
|
||||||
mDividerItemDecoration = new DividerItemDecoration(this,
|
@Override
|
||||||
mListLayoutManager.getOrientation());
|
public SimpleStringAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
|
||||||
|
int viewType) {
|
||||||
|
final SimpleStringAdapter.ViewHolder vh = super
|
||||||
|
.onCreateViewHolder(parent, viewType);
|
||||||
|
vh.itemView.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
final int pos = vh.getPosition();
|
||||||
|
if (pos + 1 < getItemCount()) {
|
||||||
|
swap(pos, pos + 1);
|
||||||
|
}
|
||||||
|
notifyItemChanged(pos);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return vh;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
initListForLayoutManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initListForLayoutManager() {
|
||||||
|
mListWrapper = new ListWrapper() {
|
||||||
|
@Override
|
||||||
|
public int getOrientation() {
|
||||||
|
return lm().getOrientation();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setOrientation(int orientation) {
|
||||||
|
lm().setOrientation(orientation);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean getReverseLayout() {
|
||||||
|
return lm().getReverseLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setReverseLayout(boolean newValue) {
|
||||||
|
lm().setReverseLayout(newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean getStackFromEnd() {
|
||||||
|
return lm().getStackFromEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setStackFromEnd(boolean newValue) {
|
||||||
|
lm().setStackFromEnd(newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LinearLayoutManager lm() {
|
||||||
|
return (LinearLayoutManager) mListLayoutManager;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (mDividerItemDecoration != null) {
|
||||||
|
mRecyclerView.removeItemDecoration(mDividerItemDecoration);
|
||||||
|
}
|
||||||
|
mDividerItemDecoration = new DividerItemDecoration(this, mListWrapper.getOrientation());
|
||||||
mRecyclerView.addItemDecoration(mDividerItemDecoration);
|
mRecyclerView.addItemDecoration(mDividerItemDecoration);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +141,11 @@ public class LinearLayoutManagerActivity extends Activity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initSpinner() {
|
private void initSpinner() {
|
||||||
Spinner spinner = (Spinner) findViewById(R.id.spinner);
|
final CheckBox checkBox = (CheckBox)
|
||||||
|
findViewById(R.id.enable_smooth_scroll);
|
||||||
|
|
||||||
|
final Spinner spinner = (Spinner) findViewById(R.id.spinner);
|
||||||
|
final EditText scrollOffset = (EditText) findViewById(R.id.scroll_offset);
|
||||||
spinner.setAdapter(new BaseAdapter() {
|
spinner.setAdapter(new BaseAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public int getCount() {
|
public int getCount() {
|
||||||
@@ -102,7 +164,7 @@ public class LinearLayoutManagerActivity extends Activity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View getView(int position, View convertView, ViewGroup parent) {
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
if(convertView == null) {
|
if (convertView == null) {
|
||||||
convertView = new TextView(parent.getContext());
|
convertView = new TextView(parent.getContext());
|
||||||
}
|
}
|
||||||
((TextView) convertView).setText("" + position);
|
((TextView) convertView).setText("" + position);
|
||||||
@@ -112,7 +174,25 @@ public class LinearLayoutManagerActivity extends Activity {
|
|||||||
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||||
mRecyclerView.scrollToPosition(position);
|
int offset = Integer.MIN_VALUE;
|
||||||
|
String offsetString = scrollOffset.getText().toString();
|
||||||
|
try {
|
||||||
|
offset = Integer.parseInt(offsetString);
|
||||||
|
} catch (NumberFormatException ex) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset == Integer.MIN_VALUE) {
|
||||||
|
if (checkBox.isChecked()) {
|
||||||
|
mRecyclerView.smoothScrollToPosition(position);
|
||||||
|
} else {
|
||||||
|
mRecyclerView.scrollToPosition(position);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// ignore offset until we add recycling list view with smooth scroll to offset
|
||||||
|
mRecyclerView.smoothScrollToPosition(position);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -127,25 +207,28 @@ public class LinearLayoutManagerActivity extends Activity {
|
|||||||
new ConfigToggle(R.string.checkbox_orientation) {
|
new ConfigToggle(R.string.checkbox_orientation) {
|
||||||
@Override
|
@Override
|
||||||
public boolean isChecked() {
|
public boolean isChecked() {
|
||||||
return mListLayoutManager.getOrientation() == LinearLayoutManager.HORIZONTAL;
|
return mListWrapper.getOrientation() == LinearLayoutManager.HORIZONTAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onChange(boolean newValue) {
|
public void onChange(boolean newValue) {
|
||||||
mListLayoutManager.setOrientation(newValue ? LinearLayoutManager.HORIZONTAL
|
mListWrapper.setOrientation(newValue ? LinearLayoutManager.HORIZONTAL
|
||||||
: LinearLayoutManager.VERTICAL);
|
: LinearLayoutManager.VERTICAL);
|
||||||
mDividerItemDecoration.setOrientation(mListLayoutManager.getOrientation());
|
if (mDividerItemDecoration != null) {
|
||||||
|
mDividerItemDecoration.setOrientation(mListWrapper.getOrientation());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
new ConfigToggle(R.string.checkbox_reverse) {
|
new ConfigToggle(R.string.checkbox_reverse) {
|
||||||
@Override
|
@Override
|
||||||
public boolean isChecked() {
|
public boolean isChecked() {
|
||||||
return mListLayoutManager.getReverseLayout();
|
return mListWrapper.getReverseLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onChange(boolean newValue) {
|
public void onChange(boolean newValue) {
|
||||||
mListLayoutManager.setReverseLayout(newValue);
|
mListWrapper.setReverseLayout(newValue);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
new ConfigToggle(R.string.checkbox_layout_dir) {
|
new ConfigToggle(R.string.checkbox_layout_dir) {
|
||||||
@@ -164,12 +247,12 @@ public class LinearLayoutManagerActivity extends Activity {
|
|||||||
new ConfigToggle(R.string.checkbox_stack_from_end) {
|
new ConfigToggle(R.string.checkbox_stack_from_end) {
|
||||||
@Override
|
@Override
|
||||||
public boolean isChecked() {
|
public boolean isChecked() {
|
||||||
return mListLayoutManager.getStackFromEnd();
|
return mListWrapper.getStackFromEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onChange(boolean newValue) {
|
public void onChange(boolean newValue) {
|
||||||
mListLayoutManager.setStackFromEnd(newValue);
|
mListWrapper.setStackFromEnd(newValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -221,7 +304,6 @@ public class LinearLayoutManagerActivity extends Activity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private RecyclerView.Adapter mConfigAdapter = new RecyclerView.Adapter<ConfigViewHolder>() {
|
private RecyclerView.Adapter mConfigAdapter = new RecyclerView.Adapter<ConfigViewHolder>() {
|
||||||
@Override
|
@Override
|
||||||
public ConfigViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
public ConfigViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
@@ -240,4 +322,25 @@ public class LinearLayoutManagerActivity extends Activity {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To avoid adding interfaces to LayoutManager for the demo, we use this wrapper class to
|
||||||
|
* call different LayoutManagers
|
||||||
|
*/
|
||||||
|
private static interface ListWrapper {
|
||||||
|
|
||||||
|
int getOrientation();
|
||||||
|
|
||||||
|
void setOrientation(int orientation);
|
||||||
|
|
||||||
|
boolean getReverseLayout();
|
||||||
|
|
||||||
|
void setReverseLayout(boolean newValue);
|
||||||
|
|
||||||
|
boolean getStackFromEnd();
|
||||||
|
|
||||||
|
void setStackFromEnd(boolean newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
package com.example.android.supportv7.widget.adapter;
|
package com.example.android.supportv7.widget.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
@@ -34,16 +34,16 @@ public class SimpleStringAdapter extends RecyclerView.Adapter<SimpleStringAdapte
|
|||||||
|
|
||||||
public static class ViewHolder extends RecyclerView.ViewHolder {
|
public static class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
public TextView textView;
|
public TextView mTextView;
|
||||||
|
|
||||||
public ViewHolder(TextView v) {
|
public ViewHolder(TextView v) {
|
||||||
super(v);
|
super(v);
|
||||||
textView = v;
|
mTextView = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return super.toString() + " '" + textView.getText();
|
return super.toString() + " '" + mTextView.getText();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,16 +69,36 @@ public class SimpleStringAdapter extends RecyclerView.Adapter<SimpleStringAdapte
|
|||||||
@Override
|
@Override
|
||||||
public SimpleStringAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
public SimpleStringAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
final ViewHolder h = new ViewHolder(new TextView(parent.getContext()));
|
final ViewHolder h = new ViewHolder(new TextView(parent.getContext()));
|
||||||
h.textView.setMinimumHeight(128);
|
h.mTextView.setMinimumHeight(128);
|
||||||
h.textView.setPadding(20, 0, 20, 0);
|
h.mTextView.setPadding(20, 0, 20, 0);
|
||||||
h.textView.setFocusable(true);
|
h.mTextView.setFocusable(true);
|
||||||
h.textView.setBackgroundResource(mBackground);
|
h.mTextView.setBackgroundResource(mBackground);
|
||||||
|
RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(
|
||||||
|
ViewGroup.LayoutParams.WRAP_CONTENT,
|
||||||
|
ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
|
lp.leftMargin = 10;
|
||||||
|
lp.rightMargin = 5;
|
||||||
|
lp.topMargin = 20;
|
||||||
|
lp.bottomMargin = 15;
|
||||||
|
h.mTextView.setLayoutParams(lp);
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
holder.textView.setText(position + ":" + mValues.get(position));
|
holder.mTextView.setText(position + ":" + mValues.get(position));
|
||||||
|
holder.mTextView.setMinHeight((200 + mValues.get(position).length() * 10));
|
||||||
|
holder.mTextView.setBackgroundColor(getBackgroundColor(position));
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getBackgroundColor(int position) {
|
||||||
|
switch (position % 4) {
|
||||||
|
case 0: return Color.BLACK;
|
||||||
|
case 1: return Color.RED;
|
||||||
|
case 2: return Color.GREEN;
|
||||||
|
case 3: return Color.BLUE;
|
||||||
|
}
|
||||||
|
return Color.TRANSPARENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user