Links & DependenciesExampleAdapter.javaactivity_main.xmlexample_item.xmlExampleItem.javaMainActivity.java
Google Maven Repository:
maven { url "https://maven.google.com" }
RecyclerView & CardView Dependencies:
developer.android.com/topic/libraries/support-library/packages.html#v7-recyclerview
developer.android.com/topic/libraries/support-library/packages.html#v7-cardview
package com.example.application.recyclerviewproject; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> { private ArrayList<ExampleItem> mExampleList; private OnItemClickListener mListener; public interface OnItemClickListener { void onItemClick(int position); void onDeleteClick(int position); } public void setOnItemClickListener(OnItemClickListener listener) { mListener = listener; } public static class ExampleViewHolder extends RecyclerView.ViewHolder { public ImageView mImageView; public TextView mTextView1; public TextView mTextView2; public ImageView mDeleteImage; public ExampleViewHolder(View itemView, final OnItemClickListener listener) { super(itemView); mImageView = itemView.findViewById(R.id.imageView); mTextView1 = itemView.findViewById(R.id.textView); mTextView2 = itemView.findViewById(R.id.textView2); mDeleteImage = itemView.findViewById(R.id.image_delete); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { int position = getAdapterPosition(); if (position != RecyclerView.NO_POSITION) { listener.onItemClick(position); } } } }); mDeleteImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { int position = getAdapterPosition(); if (position != RecyclerView.NO_POSITION) { listener.onDeleteClick(position); } } } }); } } public ExampleAdapter(ArrayList<ExampleItem> exampleList) { mExampleList = exampleList; } @Override public ExampleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item, parent, false); ExampleViewHolder evh = new ExampleViewHolder(v, mListener); return evh; } @Override public void onBindViewHolder(ExampleViewHolder holder, int position) { ExampleItem currentItem = mExampleList.get(position); holder.mImageView.setImageResource(currentItem.getImageResource()); holder.mTextView1.setText(currentItem.getText1()); holder.mTextView2.setText(currentItem.getText2()); } @Override public int getItemCount() { return mExampleList.size(); } }
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.application.recyclerviewproject.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="100dp" android:background="@android:color/darker_gray" android:padding="4dp" android:scrollbars="vertical" /> <EditText android:id="@+id/edittext_insert" android:layout_width="40dp" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentBottom="true" android:layout_marginStart="15dp" android:layout_marginBottom="25dp" android:inputType="number" /> <Button android:id="@+id/button_insert" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@id/edittext_insert" android:layout_toEndOf="@id/edittext_insert" android:text="insert" /> <EditText android:id="@+id/edittext_remove" android:layout_width="40dp" android:layout_height="wrap_content" android:layout_alignBottom="@id/button_insert" android:layout_marginStart="65dp" android:layout_toEndOf="@id/button_insert" android:inputType="number" /> <Button android:id="@+id/button_remove" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@id/edittext_remove" android:layout_toEndOf="@id/edittext_remove" android:text="remove" /> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="4dp" app:cardCornerRadius="4dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="4dp"> <ImageView android:id="@+id/imageView" android:layout_width="50dp" android:layout_height="50dp" android:padding="2dp" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toEndOf="@+id/imageView" android:text="Line 1" android:textColor="@android:color/black" android:textSize="20sp" android:textStyle="bold" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView" android:layout_marginStart="8dp" android:layout_toEndOf="@+id/imageView" android:text="Line 2" android:textSize="15sp" /> <ImageView android:id="@+id/image_delete" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" android:src="@drawable/ic_delete" /> </RelativeLayout> </android.support.v7.widget.CardView>
package com.example.application.recyclerviewproject; public class ExampleItem { private int mImageResource; private String mText1; private String mText2; public ExampleItem(int imageResource, String text1, String text2) { mImageResource = imageResource; mText1 = text1; mText2 = text2; } public void changeText1(String text) { mText1 = text; } public int getImageResource() { return mImageResource; } public String getText1() { return mText1; } public String getText2() { return mText2; } }
package com.example.application.recyclerviewproject; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.Button; import android.widget.EditText; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private ArrayList<ExampleItem> mExampleList; private RecyclerView mRecyclerView; private ExampleAdapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; private Button buttonInsert; private Button buttonRemove; private EditText editTextInsert; private EditText editTextRemove; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); createExampleList(); buildRecyclerView(); setButtons(); } public void insertItem(int position) { mExampleList.add(position, new ExampleItem(R.drawable.ic_android, "New Item At Position" + position, "This is Line 2")); mAdapter.notifyItemInserted(position); } public void removeItem(int position) { mExampleList.remove(position); mAdapter.notifyItemRemoved(position); } public void changeItem(int position, String text) { mExampleList.get(position).changeText1(text); mAdapter.notifyItemChanged(position); } public void createExampleList() { mExampleList = new ArrayList<>(); mExampleList.add(new ExampleItem(R.drawable.ic_android, "Line 1", "Line 2")); mExampleList.add(new ExampleItem(R.drawable.ic_audio, "Line 3", "Line 4")); mExampleList.add(new ExampleItem(R.drawable.ic_sun, "Line 5", "Line 6")); } public void buildRecyclerView() { mRecyclerView = findViewById(R.id.recyclerView); mRecyclerView.setHasFixedSize(true); mLayoutManager = new LinearLayoutManager(this); mAdapter = new ExampleAdapter(mExampleList); mRecyclerView.setLayoutManager(mLayoutManager); mRecyclerView.setAdapter(mAdapter); mAdapter.setOnItemClickListener(new ExampleAdapter.OnItemClickListener() { @Override public void onItemClick(int position) { changeItem(position, "Clicked"); } @Override public void onDeleteClick(int position) { removeItem(position); } }); } public void setButtons() { buttonInsert = findViewById(R.id.button_insert); buttonRemove = findViewById(R.id.button_remove); editTextInsert = findViewById(R.id.edittext_insert); editTextRemove = findViewById(R.id.edittext_remove); buttonInsert.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = Integer.parseInt(editTextInsert.getText().toString()); insertItem(position); } }); buttonRemove.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = Integer.parseInt(editTextRemove.getText().toString()); removeItem(position); } }); } }