1/9

Lecture Mobile Application Development (119310)

Android Framework Basics

2/9

Agenda

3/9

RecyclerView

  • Same concept as ListView
  • More advanced and flexible version of ListView
  • Solves performance bottleneck by forcing developers to implement ViewHolder pattern
  • Can be used to display
    • List
    • Grid
    • Pager
  • LayoutManager defines direction
    • vertical
    • horizontal
  • Highly customizable

4/9

RecyclerView

dependencies {
    ...
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    ...
}  

5/9

RecyclerView

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

6/9

LayoutManager

RecyclerView RecyclerView = (ListView) findViewById(R.id.list);
recyclerView.setLayoutManager(new LinearLayoutManager(context));

recyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
recyclerView.setLayoutManager(new GridLayoutManager(context, 3));

7/9

RecyclerView.ViewHolder

public class ViewHolder extends RecyclerView.ViewHolder {
        public final View mView;
        public final TextView mItemNumberView;
        public final TextView mContentView;
        public DummyItem mItem;

        public ViewHolder(View view) {
            super(view);
            mView = view;
            mItemNumberView = (TextView) view.findViewById(R.id.item_number);
            mContentView = (TextView) view.findViewById(R.id.content);
        }
    }
8/9

RecyclerView.Adapter

public class MyItemRecyclerViewAdapter extends RecyclerView.Adapter<MyItemRecyclerViewAdapter.ViewHolder> {

    private final List<DummyItem> mValues;

    public MyItemRecyclerViewAdapter(List<DummyItem> items, OnListFragmentInteractionListener listener) {
        mValues = items;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        holder.mItem = mValues.get(position);
        holder.mItemNumberView.setText(mValues.get(position).id);
        holder.mContentView.setText(mValues.get(position).content);
    }

    @Override
    public int getItemCount() {
        return mValues.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        ...
    }
}
9/9

RecyclerView Setup

RecyclerView RecyclerView = (ListView) findViewById(R.id.list);
recyclerView.setLayoutManager(new LinearLayoutManager(context));

// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
recyclerView.setHasFixedSize(true);

recyclerView.setAdapter(new MyItemRecyclerViewAdapter(myItems));