Join the social network of Tech Nerds, increase skill rank, get work, manage projects...
 
  • RecyclerView with Event Listener

    • 0
    • 2
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 844
    Comment on it

    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.

    1. <!-- A RecyclerView with some commonly used attributes -->
    2. <android.support.v7.widget.RecyclerView
    3. android:id="@+id/my_recycler_view"
    4. android:scrollbars="vertical"
    5. android:layout_width="match_parent"
    6. android:layout_height="match_parent"
    7. xmlns:android="http://schemas.android.com/apk/res/android" />

    Now in your activity class declare the following references:-

    1. private RecyclerView mRecyclerView;
    2. private RecyclerView.Adapter mAdapter;
    3. private RecyclerView.LayoutManager mLayoutManager;

    In onCreate method

    1. mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
    2.  
    3. // use this setting to improve performance if you know that changes
    4. // in content do not change the layout size of the RecyclerView
    5. mRecyclerView.setHasFixedSize(true);
    6.  
    7.  
    8.  
    9. // use a linear layout manager
    10. mLayoutManager = new LinearLayoutManager(this);
    11. mRecyclerView.setLayoutManager(mLayoutManager);
    12. mRecyclerView.setItemAnimator(new DefaultItemAnimator());
    13.  
    14. // specify an adapter
    15. mAdapter = new MyAdapter(myDataset);
    16. 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.

    1. public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    2. private List<String> mDataset;
    3.  
    4. // Provide a reference to the views for each data item
    5. // Complex data items may need more than one view per item, and
    6. // you provide access to all the views for a data item in a view holder
    7. public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
    8. // each data item is just a string in this case
    9. public TextView mTextView;
    10. public AdapterClickListener adapterClickListener;
    11.  
    12. public ViewHolder(View v, AdapterClickListener adapterClickListener) {
    13. super(v);
    14. this.adapterClickListener = adapterClickListener;
    15. mTextView = (TextView) v.findViewById(R.id.text);
    16.  
    17. v.setOnClickListener(this);
    18. v.setOnLongClickListener(this);
    19. }
    20.  
    21. @Override
    22. public void onClick(View v) {
    23. adapterClickListener.onAadapterItemClick(v, getAdapterPosition());
    24. }
    25.  
    26. @Override
    27. public boolean onLongClick(View v) {
    28. adapterClickListener.onLongClick(v, getAdapterPosition());
    29. return false;
    30. }
    31.  
    32. public static interface AdapterClickListener {
    33. public void onAadapterItemClick(View view, int position);
    34.  
    35. public void onLongClick(View view, int position);
    36. }
    37. }
    38.  
    39. // Provide a suitable constructor (depends on the kind of dataset)
    40. public MyAdapter(List<String> myDataset) {
    41. mDataset = myDataset;
    42. }
    43.  
    44. // Create new views (invoked by the layout manager)
    45. @Override
    46. public MyAdapter.ViewHolder onCreateViewHolder(final ViewGroup parent,
    47. int viewType) {
    48. // create a new view
    49. View v = LayoutInflater.from(parent.getContext())
    50. .inflate(R.layout.my_text_view, parent, false);
    51. // set the view's size, margins, paddings and layout parameters
    52.  
    53. ViewHolder vh = new ViewHolder(v, new ViewHolder.AdapterClickListener() {
    54. @Override
    55. public void onAadapterItemClick(View view, int position) {
    56. if (position != -1) {
    57. mDataset.add(position, "add");
    58. notifyItemInserted(position);
    59. }
    60. }
    61.  
    62. @Override
    63. public void onLongClick(View view, final int position) {
    64. AlertDialog.Builder builder = new AlertDialog.Builder(parent.getContext());
    65. builder.setMessage("Are you really want to delete this contact");
    66. builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    67. @Override
    68. public void onClick(DialogInterface dialog, int which) {
    69. mDataset.remove(position);
    70. notifyItemRemoved(position);
    71. }
    72. });
    73. builder.setNegativeButton("No", null).show();
    74.  
    75. }
    76. });
    77. return vh;
    78. }
    79.  
    80. // Replace the contents of a view (invoked by the layout manager)
    81. @Override
    82. public void onBindViewHolder(ViewHolder holder, int position) {
    83. // - get element from your dataset at this position
    84. // - replace the contents of the view with that element
    85. holder.mTextView.setText(mDataset.get(position) + "");
    86.  
    87. }
    88.  
    89. // Return the size of your dataset (invoked by the layout manager)
    90. @Override
    91. public int getItemCount() {
    92. return mDataset.size();
    93. }
    94. }

 0 Comment(s)

Sign In
                           OR                           
                           OR                           
Register

Sign up using

                           OR                           
Forgot Password
Reset Password
Fill out the form below and reset your password: