almost 10 years ago
RecyclerView is the more refine and flexible version of ListView. It is available in v7 supporting package. For using RecyclerView you need to import "android.support.v7.widget.RecyclerView" package.
In order to add RecyclerView into your application, first you need to add RecyclerView in your xml.
- <!-- A RecyclerView with some commonly used attributes -->
- <android.support.v7.widget.RecyclerView
- android:id="@+id/my_recycler_view"
- android:scrollbars="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- xmlns:android="http://schemas.android.com/apk/res/android" />
<!-- A RecyclerView with some commonly used attributes --> <android.support.v7.widget.RecyclerView android:id="@+id/my_recycler_view" android:scrollbars="vertical" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" />
Now in your activity class declare the following references:-
In onCreate method
- mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
- // use this setting to improve performance if you know that changes
- // in content do not change the layout size of the RecyclerView
- mRecyclerView.setHasFixedSize(true);
- // use a linear layout manager
- mLayoutManager = new LinearLayoutManager(this);
- mRecyclerView.setLayoutManager(mLayoutManager);
- mRecyclerView.setItemAnimator(new DefaultItemAnimator());
- // specify an adapter
- mAdapter = new MyAdapter(myDataset);
- mRecyclerView.setAdapter(mAdapter);
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); // use this setting to improve performance if you know that changes // in content do not change the layout size of the RecyclerView mRecyclerView.setHasFixedSize(true); // use a linear layout manager mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); // specify an adapter mAdapter = new MyAdapter(myDataset); mRecyclerView.setAdapter(mAdapter);
Now create an adapter class that extends RecyclerView.Adapter class. Inside this class there is an inner class that extends RecyclerView.ViewHolder. The ViewHolder class provides a reference to the view of each data item. The below example also shows how to add listener and some default animation of RecyclerView.
- public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
- private List<String> mDataset;
- // Provide a reference to the views for each data item
- // Complex data items may need more than one view per item, and
- // you provide access to all the views for a data item in a view holder
- public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
- // each data item is just a string in this case
- public TextView mTextView;
- public AdapterClickListener adapterClickListener;
- public ViewHolder(View v, AdapterClickListener adapterClickListener) {
- super(v);
- this.adapterClickListener = adapterClickListener;
- mTextView = (TextView) v.findViewById(R.id.text);
- v.setOnClickListener(this);
- v.setOnLongClickListener(this);
- }
- @Override
- public void onClick(View v) {
- adapterClickListener.onAadapterItemClick(v, getAdapterPosition());
- }
- @Override
- public boolean onLongClick(View v) {
- adapterClickListener.onLongClick(v, getAdapterPosition());
- return false;
- }
- public static interface AdapterClickListener {
- public void onAadapterItemClick(View view, int position);
- public void onLongClick(View view, int position);
- }
- }
- // Provide a suitable constructor (depends on the kind of dataset)
- public MyAdapter(List<String> myDataset) {
- mDataset = myDataset;
- }
- // Create new views (invoked by the layout manager)
- @Override
- public MyAdapter.ViewHolder onCreateViewHolder(final ViewGroup parent,
- int viewType) {
- // create a new view
- View v = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.my_text_view, parent, false);
- // set the view's size, margins, paddings and layout parameters
- ViewHolder vh = new ViewHolder(v, new ViewHolder.AdapterClickListener() {
- @Override
- public void onAadapterItemClick(View view, int position) {
- if (position != -1) {
- mDataset.add(position, "add");
- notifyItemInserted(position);
- }
- }
- @Override
- public void onLongClick(View view, final int position) {
- AlertDialog.Builder builder = new AlertDialog.Builder(parent.getContext());
- builder.setMessage("Are you really want to delete this contact");
- builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- mDataset.remove(position);
- notifyItemRemoved(position);
- }
- });
- builder.setNegativeButton("No", null).show();
- }
- });
- return vh;
- }
- // Replace the contents of a view (invoked by the layout manager)
- @Override
- public void onBindViewHolder(ViewHolder holder, int position) {
- // - get element from your dataset at this position
- // - replace the contents of the view with that element
- holder.mTextView.setText(mDataset.get(position) + "");
- }
- // Return the size of your dataset (invoked by the layout manager)
- @Override
- public int getItemCount() {
- return mDataset.size();
- }
- }
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> mDataset; // Provide a reference to the views for each data item // Complex data items may need more than one view per item, and // you provide access to all the views for a data item in a view holder public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { // each data item is just a string in this case public TextView mTextView; public AdapterClickListener adapterClickListener; public ViewHolder(View v, AdapterClickListener adapterClickListener) { super(v); this.adapterClickListener = adapterClickListener; mTextView = (TextView) v.findViewById(R.id.text); v.setOnClickListener(this); v.setOnLongClickListener(this); } @Override public void onClick(View v) { adapterClickListener.onAadapterItemClick(v, getAdapterPosition()); } @Override public boolean onLongClick(View v) { adapterClickListener.onLongClick(v, getAdapterPosition()); return false; } public static interface AdapterClickListener { public void onAadapterItemClick(View view, int position); public void onLongClick(View view, int position); } } // Provide a suitable constructor (depends on the kind of dataset) public MyAdapter(List<String> myDataset) { mDataset = myDataset; } // Create new views (invoked by the layout manager) @Override public MyAdapter.ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) { // create a new view View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.my_text_view, parent, false); // set the view's size, margins, paddings and layout parameters ViewHolder vh = new ViewHolder(v, new ViewHolder.AdapterClickListener() { @Override public void onAadapterItemClick(View view, int position) { if (position != -1) { mDataset.add(position, "add"); notifyItemInserted(position); } } @Override public void onLongClick(View view, final int position) { AlertDialog.Builder builder = new AlertDialog.Builder(parent.getContext()); builder.setMessage("Are you really want to delete this contact"); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mDataset.remove(position); notifyItemRemoved(position); } }); builder.setNegativeButton("No", null).show(); } }); return vh; } // Replace the contents of a view (invoked by the layout manager) @Override public void onBindViewHolder(ViewHolder holder, int position) { // - get element from your dataset at this position // - replace the contents of the view with that element holder.mTextView.setText(mDataset.get(position) + ""); } // Return the size of your dataset (invoked by the layout manager) @Override public int getItemCount() { return mDataset.size(); } }
0 Comment(s)