Links & DependenciesMainActivity.javaactivity_main.xmlActivity2.javaactivity2.xmlExampleItem.javaexample_item.xmlExampleAdapter.java
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.codinginflow.parcelableexample; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private ArrayList<ExampleItem> mExampleList; private RecyclerView mRecyclerView; private ExampleAdapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); createExampleList(); buildRecyclerView(); } 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) { Intent intent = new Intent(MainActivity.this, Activity2.class); intent.putExtra("Example Item", mExampleList.get(position)); startActivity(intent); } }); } }
<?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.codinginflow.parcelableexample.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/darker_gray" android:padding="4dp" android:scrollbars="vertical" /> </RelativeLayout>
package com.codinginflow.parcelableexample; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageView; import android.widget.TextView; public class Activity2 extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_2); Intent intent = getIntent(); ExampleItem exampleItem = intent.getParcelableExtra("Example Item"); int imageRes = exampleItem.getImageResource(); String line1 = exampleItem.getText1(); String line2 = exampleItem.getText2(); ImageView imageView = findViewById(R.id.image_activity2); imageView.setImageResource(imageRes); TextView textView1 = findViewById(R.id.text1_activity2); textView1.setText(line1); TextView textView2 = findViewById(R.id.text2_activity2); textView2.setText(line2); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:orientation="vertical" tools:context="com.codinginflow.parcelableexample.Activity2"> <ImageView android:id="@+id/image_activity2" android:layout_width="100dp" android:layout_height="100dp" /> <TextView android:id="@+id/text1_activity2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" /> <TextView android:id="@+id/text2_activity2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" /> </LinearLayout>
package com.codinginflow.parcelableexample; import android.os.Parcel; import android.os.Parcelable; public class ExampleItem implements Parcelable { private int mImageResource; private String mText1; private String mText2; public ExampleItem(int imageResource, String text1, String text2) { mImageResource = imageResource; mText1 = text1; mText2 = text2; } protected ExampleItem(Parcel in) { mImageResource = in.readInt(); mText1 = in.readString(); mText2 = in.readString(); } public static final Creator<ExampleItem> CREATOR = new Creator<ExampleItem>() { @Override public ExampleItem createFromParcel(Parcel in) { return new ExampleItem(in); } @Override public ExampleItem[] newArray(int size) { return new ExampleItem[size]; } }; public int getImageResource() { return mImageResource; } public String getText1() { return mText1; } public String getText2() { return mText2; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mImageResource); dest.writeString(mText1); dest.writeString(mText2); } }
<?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" /> </RelativeLayout> </android.support.v7.widget.CardView>
package com.codinginflow.parcelableexample; 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); } public void setOnItemClickListener(OnItemClickListener listener) { mListener = listener; } public static class ExampleViewHolder extends RecyclerView.ViewHolder { public ImageView mImageView; public TextView mTextView1; public TextView mTextView2; 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); 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); } } } }); } } 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(); } }