Slide 1

Slide 1 text

@stan_kocken EfficientAdapter use of RecyclerView much easier

Slide 2

Slide 2 text

RecyclerView

Slide 3

Slide 3 text

RecyclerView LayoutManager

Slide 4

Slide 4 text

RecyclerView LayoutManager Adapter Dataset ViewHolder

Slide 5

Slide 5 text

w er Adapter ViewHolder public class MyAdapter extends RecyclerView.Adapter { private String[] mDataset; public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(TextView v) { super(v); mTextView = v; } } public MyAdapter(String[] myDataset) { mDataset = myDataset; } @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.my_text_view, parent, false); ViewHolder vh = new ViewHolder(v); return vh; } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.mTextView.setText(mDataset[position]); } @Override public int getItemCount() { return mDataset.length; } } https://developer.android.com/training/material/lists-cards.html

Slide 6

Slide 6 text

Click listeners ?

Slide 7

Slide 7 text

w er Adapter ViewHolder public class MyAdapter extends RecyclerView.Adapter { private String[] mDataset; public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(TextView v) { super(v); mTextView = v; } } public MyAdapter(String[] myDataset) { mDataset = myDataset; } @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.my_text_view, parent, false); ViewHolder vh = new ViewHolder(v); return vh; } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.mTextView.setText(mDataset[position]); } @Override public int getItemCount() { return mDataset.length; } } https://developer.android.com/training/material/lists-cards.html

Slide 8

Slide 8 text

Click listeners ? only on some items?

Slide 9

Slide 9 text

w er Adapter ViewHolder public class MyAdapter extends RecyclerView.Adapter { private String[] mDataset; public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(TextView v) { super(v); mTextView = v; } } public MyAdapter(String[] myDataset) { mDataset = myDataset; } @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.my_text_view, parent, false); ViewHolder vh = new ViewHolder(v); return vh; } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.mTextView.setText(mDataset[position]); } @Override public int getItemCount() { return mDataset.length; } } https://developer.android.com/training/material/lists-cards.html

Slide 10

Slide 10 text

Click listeners ? only on some items? add an element ?

Slide 11

Slide 11 text

w er Adapter ViewHolder public class MyAdapter extends RecyclerView.Adapter { private String[] mDataset; public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(TextView v) { super(v); mTextView = v; } } public MyAdapter(String[] myDataset) { mDataset = myDataset; } @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.my_text_view, parent, false); ViewHolder vh = new ViewHolder(v); return vh; } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.mTextView.setText(mDataset[position]); } @Override public int getItemCount() { return mDataset.length; } } https://developer.android.com/training/material/lists-cards.html

Slide 12

Slide 12 text

Click listeners ? only on some items? add an element ? Different layouts ?

Slide 13

Slide 13 text

w er Adapter ViewHolder public class MyAdapter extends RecyclerView.Adapter { private String[] mDataset; public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(TextView v) { super(v); mTextView = v; } } public MyAdapter(String[] myDataset) { mDataset = myDataset; } @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.my_text_view, parent, false); ViewHolder vh = new ViewHolder(v); return vh; } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.mTextView.setText(mDataset[position]); } @Override public int getItemCount() { return mDataset.length; } } https://developer.android.com/training/material/lists-cards.html

Slide 14

Slide 14 text

Click listeners ? only on some items? add an element ? Different layouts ? One adapter like that per list ?

Slide 15

Slide 15 text

EfficientAdapter

Slide 16

Slide 16 text

w er Adapter ViewHolder EfficientAdapter EfficientViewHolder

Slide 17

Slide 17 text

public class MyAdapter extends RecyclerView.Adapter { ... public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(TextView v) { super(v); mTextView = v; } } ... @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.mTextView.setText(mDataset[position]); } ... } Made in Google ViewHolder

Slide 18

Slide 18 text

public class MyAdapter extends RecyclerView.Adapter { ... public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(TextView v) { super(v); mTextView = v; } } ... @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.mTextView.setText(mDataset[position]); } ... } public class MyViewHolder extends EfficientViewHolder { public MyViewHolder(View v) { super(v); } @Override protected void updateView(Context context, String object) { TextView textView = (TextView) getView(); textView.setText(object); } } Made in Google with EfficientAdapter ViewHolder

Slide 19

Slide 19 text

public class MyAdapter extends RecyclerView.Adapter { private String[] mDataset; ... public MyAdapter(String[] myDataset) { mDataset = myDataset; } @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.my_text_view, parent, false); ViewHolder vh = new ViewHolder(v); return vh; } ... @Override public int getItemCount() { return mDataset.length; } } recyclerView.setAdapter(new MyAdapter()); Made in Google Adapter

Slide 20

Slide 20 text

public class MyAdapter extends RecyclerView.Adapter { private String[] mDataset; ... public MyAdapter(String[] myDataset) { mDataset = myDataset; } @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.my_text_view, parent, false); ViewHolder vh = new ViewHolder(v); return vh; } ... @Override public int getItemCount() { return mDataset.length; } } recyclerView.setAdapter(new MyAdapter()); Made in Google recyclerView.setAdapter( new EfficientRecyclerAdapter(R.layout.my_text_view, MyViewHolder.class, myDataset)); with EfficientAdapter Adapter

Slide 21

Slide 21 text

Advanced topics ● access view into the layout

Slide 22

Slide 22 text

public class MyViewHolder extends EfficientViewHolder { ... @Override protected void updateView(Context context, String object) { TextView textView = findViewByIdEfficient(R.id.my_textview); textView.setText(object); } } findViewByIdEfficient

Slide 23

Slide 23 text

findViewByIdEfficient public class MyViewHolder extends EfficientViewHolder { ... @Override protected void updateView(Context context, String object) { TextView textView = findViewByIdEfficient(R.id.my_textview); textView.setText(object); } } auto-hold views

Slide 24

Slide 24 text

findViewByIdEfficient public class MyViewHolder extends EfficientViewHolder { ... @Override protected void updateView(Context context, String object) { TextView textView = findViewByIdEfficient(R.id.my_textview); textView.setText(object); } } auto-cast

Slide 25

Slide 25 text

Advanced topics ● add clicks listeners

Slide 26

Slide 26 text

EfficientAdapter adapter = new EfficientRecyclerAdapter(...); adapter.setOnItemClickListener(this); adapter.setOnItemLongClickListener(this); add clicks listeners void onItemClick(EfficientAdapter parent, View view, String object, int position); void onLongItemClick(EfficientAdapter parent, View view, String object, int position);

Slide 27

Slide 27 text

add clicks listeners - not everywhere public class MyViewHolder extends EfficientViewHolder { ... @Override public boolean isClickable() { return true; } @Override public boolean isLongClickable() { return false; } }

Slide 28

Slide 28 text

Advanced topics ● add / remove elements

Slide 29

Slide 29 text

add / remove elements adapter.add(“example1”); // add one object adapter.addAll(“example 2”, “example 3”); // add from an array adapter.addAll(list); // add from a collection adapter.remove(“example1”); // remove element adapter.removeAt(1); // remove element at position 1 adapter.move(1, 2); // invert element 1 and 2 Auto-animated

Slide 30

Slide 30 text

Advanced topics ● different layout / item

Slide 31

Slide 31 text

different layout / item EfficientAdapter adapter = new EfficientRecyclerAdapter(myDataset);

Slide 32

Slide 32 text

different layout / item EfficientAdapter adapter = new EfficientRecyclerAdapter(myDataset) { @Override public int getItemViewType(int position) { return ? } };

Slide 33

Slide 33 text

different layout / item private static final int VIEW_TYPE_BOOK = 0; private static final int VIEW_TYPE_PLANE = 1; EfficientAdapter adapter = new EfficientRecyclerAdapter(myDataset) { @Override public int getItemViewType(int position) { return (get(position) instanceof Plane) ? VIEW_TYPE_PLANE : VIEW_TYPE_BOOK; } };

Slide 34

Slide 34 text

different layout / item private static final int VIEW_TYPE_BOOK = 0; private static final int VIEW_TYPE_PLANE = 1; EfficientAdapter adapter = new EfficientRecyclerAdapter(myDataset) { @Override public int getItemViewType(int position) { return (get(position) instanceof Plane) ? VIEW_TYPE_PLANE : VIEW_TYPE_BOOK; } @Override public Class getViewHolderClass(int viewType) { return ? } @Override public int getLayoutResId(int viewType) { return ? } };

Slide 35

Slide 35 text

different layout / item private static final int VIEW_TYPE_BOOK = 0; private static final int VIEW_TYPE_PLANE = 1; EfficientAdapter adapter = new EfficientRecyclerAdapter(myDataset) { @Override public int getItemViewType(int position) { return (get(position) instanceof Plane) ? VIEW_TYPE_PLANE : VIEW_TYPE_BOOK; } @Override public Class getViewHolderClass(int viewType) { return viewType == VIEW_TYPE_PLANE ? PlaneViewHolder.class : BookViewHolder.class; } @Override public int getLayoutResId(int viewType) { return viewType == VIEW_TYPE_PLANE ? R.layout.item_plane : R.layout.item_book; } };

Slide 36

Slide 36 text

ViewPager Also compatible with

Slide 37

Slide 37 text

github.com/ StanKocken/EfficientAdapter ★268 Gradle: dependencies { compile 'com.skocken:efficientadapter:2.0' } @stan_kocken