Blog Tutorial Android Bagi Pemula

Saturday, December 12, 2020

Contoh RecyclerView Dengan Orientasi Horizontal

Tutorial kali ini akan mencontohkan penerapan RecyclerView dengan orientasi dan scroll horizontal (mendatar). Disini kita akan memiliki 3 buah komponen RecyclerView dalam satu layout (activity_main.xml) yang dalam contoh ini adalah kategori film. RecyclerView pertama untuk kategori Film Terlaris, RecyclerView kedua untuk kategori Film Terbaru dan RecyclerView ketiga untuk kategori Film Indonesia.



Setiap item pada RecyclerView terdapat 2 buah view yaitu ImageView untuk poster dari film, dan TextView untuk judul film. Kemudian untuk klik event pada item akan membawa ke halaman details dari film yakni DetailsActivity.java. Details berisi 3 view yaitu poster film, judul film, dan deskripsi film, sehingga untuk model data getter dan konstruktor nya kita memerlukan 3 object dan semuanya adalah String.

Loh kok gambar pakai String, bukan int? Karena disini kita akan memuat gambarnya menggunakan sambungan Internet dengan bantuan library Picasso, jadi tidak perlu memasukkan file gambar ke project. Link gambar diambil dari situs The Movie Database. Berikut contoh link gambar dari situs tersebut : Klik disini.



Dari contoh link tersebut, karakter-karakter setelah simbol slash terakhir dengan ekstensi .jpg yang akan kita input saat menentukan data item link gambar dari film. Sedangkan karakter-karakter yang berada sebelum simbol slash terakhir akan kita inisialisai sehingga tidak perlu berulang-ulang memasukkan link yang sama pada setiap item nantinya.

Lalu untuk details dari film (DetailsActivity.java), data-data dari film (link gambar, judul, deskripsi) akan dikirimkan menggunakan intent yang penerapannya dilakukan di dalam file adapter dari RecyclerView. Deskripsi film kita tempatkan di resource strings.xml.

Baik, mari kita mulai dari mengimport library RecyclerView dan Picasso. Jika Anda menggunkan Android Studio 4.1.1 atau versi yang lebih baru, library RecyclerView sudah otomatis ada dalam project. Masukkan kedua library dibawah ini ke dalam dependencies build.gradle(Module: app), kemudian sync project (jangan lupa internet on).

implementation "androidx.recyclerview:recyclerview:1.1.0"
implementation 'com.squareup.picasso:picasso:2.71828'


Sebelum melangkah ke layout/konteks, buat terlebih dahulu 2 Drawable Resource File yang akan digunakan sebagai background dari layout nya nanti. Bagi Anda yang belum tahu akses membuatnya, klik kanan pada folder drawable > New > Drawable Resource File, isikan nama seperti dibawah ini. Berikut kedua background Drawable tersebut :

bg_rv.xml :
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<corners android:radius="8dp"/>
<solid android:color="@color/blackishLight"/>

</shape>

bg_container.xml :
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<corners android:radius="8dp"/>
<solid android:color="@color/black"/>

</shape>


Kedua file diatas hanya berbeda pada warna saja, selebihnya sama. Dan berikut untuk resource value yakni colors.xml, strings.xml dan themes.xml. Pada Android Studio 4.1.1 ini, nama default resource tema bukan lagi styles.xml, melainkan themes.xml. Seperti yang sudah disampaikan diatas, untuk deskripsi dari film kita tempatkan di resource value strings.xml.

colors.xml :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="blackishRed">#323030</color>
<color name="white">#FFFFFFFF</color>
<color name="whiteDark">#ECE8E8</color>
<color name="blackishLight">#3D3D3D</color>
</resources>

strings.xml :
<resources>
<string name="app_name">Horizontal RecyclerView</string>

<string name="avengers_endgame">Avengers: Endgame adalah film pahlawan super Amerika 2019 yang didasarkan pada tim
superhero Avengers dari Marvel Comics, diproduksi oleh Marvel Studios dan didistribusikan oleh Walt Disney Studios
Motion Pictures. Ini adalah sekuel The Avengers 2012, film 2015 Avengers: Age of Ultron dan film 2018
Avengers: Infinity War, dan film kedua puluh dua di Marvel Cinematic Universe (MCU).\n\nFilm ini disutradarai oleh
Anthony dan Joe Russo, yang ditulis oleh Christopher Markus dan Stephen McFeely, dan menampilkan pemeran ansambel
termasuk Robert Downey Jr, Chris Evans, Mark Ruffalo, Chris Hemsworth, Scarlett Johansson, Jeremy Renner,
Don Cheadle, Don Cheadle, Paul Rudd, Brie Larson, Karen Gillan, Danai Gurira, Benedict Wong, Jon Favreau,
Bradley Cooper, Gwyneth Paltrow, dan Josh Brolin. Dalam film itu, anggota Avengers yang masih hidup dan sekutu
mereka berusaha untuk membalikkan kerusakan yang disebabkan oleh Thanos dalam Infinity War.</string>

<string name="avatar">Avatar, dikenal sebagai James Cameron\'s Avatar, adalah film fiksi ilmiah petualangan
Amerika Serikat tahun 2009 yang disutradarai oleh James Cameron dan diproduseri oleh James Cameron dan Jon Landau.
\n\nNaskah film ini ditulis oleh James Cameron. Film ini dibintangi oleh Sam Worthington, Zoe Saldana, Stephen Lang,
Michelle Rodriguez dan Sigourney Weaver.</string>

<string name="titanic">Titanic adalah sebuah film epik, roman, dan bencana Amerika Serikat produksi tahun 1997 yang
diskenarioi sekaligus disutradarai oleh James Cameron. \n\nFilm ini bercerita tentang kisah cinta antara Jack dan Rose
(diperankan oleh Leonardo DiCaprio dan Kate Winslet) yang berasal dari status sosial berbeda di atas kapal
RMS Titanic yang tenggelam dalam pelayaran perdananya pada tanggal 15 April 1912.</string>

<string name="star_wars">Star Wars: The Force Awakens adalah sebuah film opera luar angkasa Amerika Serikat yang
disutradarai oleh J. J. Abrams. \n\nFilm ini merupakan yang ketujuh dari serial film Star Wars dan dibintangi oleh
Harrison Ford, Mark Hamill, Carrie Fisher, Adam Driver, Daisy Ridley, John Boyega, Oscar Isaac, Lupita Nyong\'o,
Andy Serkis, Domhnall Gleeson, Anthony Daniels, Peter Mayhew, dan Max von Sydow. Kisah cerita film ini terjadi
sekitar 30 tahun setelah peristiwa di dalam film Return of the Jedi (1983).</string>

<string name="avengers_infinity_war">Avengers: Infinity War adalah film pahlawan super Amerika 2018 yang didasarkan
pada tim superhero Marvel Comics the Avengers, diproduksi oleh Marvel Studios dan didistribusikan oleh
Walt Disney Studios Motion Pictures. Ini adalah sekuel The Avengers 2012 dan Avengers: Age of Ultron 2015,
dan film kesembilan belas di Marvel Cinematic Universe (MCU). \n\nFilm ini disutradarai oleh Anthony dan Joe Russo,
ditulis oleh Christopher Markus dan Stephen McFeely, dan menampilkan pemeran ansambel termasuk Robert Downey Jr,
Chris Hemsworth, Mark Ruffalo, Chris Evans, Scarlett Johansson, Benedict Cumberbatch, Don Cheadle, Tom Holland,
Chadwick Boseman, Paul Bettany, Elizabeth Olsen, Anthony Mackie, Sebastian Stan, Danai Gurira, Letitia Wright,
Dave Bautista, Zoe Saldana, Josh Brolin, dan Chris Pratt. Dalam film tersebut, Avengers dan Guardians of the
Galaxy berupaya mencegah Thanos dari mengumpulkan enam Batu Infinity yang sangat kuat sebagai bagian dari
upayanya untuk membunuh setengah dari seluruh kehidupan di alam semesta. \n\nFilm ini diumumkan pada Oktober 2014
sebagai Avengers: Infinity War - part 1. The Russo brother datang untuk mengarahkan pada April 2015, dan sebulan
kemudian Markus dan McFeely menandatangani untuk menulis naskah untuk film tersebut, yang mendapat inspirasi
dari Buku komik Jim Starlin 1991, The Infinity Gauntlet, dan komik-komik Jonathan Hickman 2013, Infinity. \n\nPada 2016,
Marvel memperpendek gelar menjadi Avengers: Infinity War. Pembuatan film dimulai pada Januari 2017 di
Pinewood Atlanta Studios di Fayette County, Georgia, dengan pemain besar yang sebagian besar terdiri dari aktor
yang mengulang peran mereka dari film MCU sebelumnya, termasuk Brolin sebagai Thanos. Dengan perkiraan
anggaran $ 316-400 juta, ini adalah salah satu film termahal yang pernah dibuat.</string>

<string name="jurassic_world">Jurassic World adalah sebuah film petualangan fiksi ilmiah 3D dari Amerika Serikat
yang disutradarai oleh Colin Trevorrow. \n\nFilm ini merupakan film keempat dari serial film Jurassic Park yang
dimulai tahun 1993 dan dibuat oleh Steven Spielberg dan kali ini, Steven menjadi produser film ini.</string>

<string name="the_lion_king">The Lion King adalah sebuah film petualangan drama Amerika Serikat yang diproduksi oleh
Walt Disney Pictures, ditulis oleh Jeff Nathanson, dan disutradarai oleh Jon Favreau. Film tersebut adalah sebuah
remake CGI fotorealistis dari film tahun 1994 bernama sama yang dianimasikan secara tradisional karya Disney.
\n\nPara pengisi suaranya adalah Donald Glover, Seth Rogen, Chiwetel Ejiofor, Billy Eichner, John Oliver,
Keegan-Michael Key, Beyoncé Knowles-Carter, dan James Earl Jones.</string>

<string name="jiu_jitsu">Every six years, an ancient order of jiu-jitsu fighters joins forces to battle a vicious
race of alien invaders. But when a celebrated war hero goes down in defeat, the fate of the planet and mankind
hangs in the balance.</string>

<string name="fatman">A rowdy, unorthodox Santa Claus is fighting to save his declining business. Meanwhile, Billy,
a neglected and precocious 12 year old, hires a hit man to kill Santa after receiving a lump of
coal in his stocking.</string>

<string name="the_dalton_gang">When their brother Frank is killed by an outlaw, brothers Bob Dalton, Emmett Dalton
and Gray Dalton join their local sheriff\'s department. When they are cheated by the law, they turn to crime,
robbing trains and anything else they can steal from over the course of two years in the early 1890\'s.
Trying to out do Jesse James, they attempt to rob two banks at once in October of 1892, and things get ugly.</string>

<string name="tenet">Armed with only one word - Tenet - and fighting for the survival of the entire world,
the Protagonist journeys through a twilight world of international espionage on a mission that will unfold in
something beyond real time.</string>

<string name="rogue_city">Caught in the crosshairs of police corruption and Marseille’s warring gangs, a loyal
cop must protect his squad by taking matters into his own hands.</string>

<string name="greenland">John Garrity, his estranged wife and their young son embark on a perilous journey to
find sanctuary as a planet-killing comet hurtles toward Earth. Amid terrifying accounts of cities getting levelled,
the Garrity\'s experience the best and worst in humanity. As the countdown to the global apocalypse approaches zero,
their incredible trek culminates in a desperate and last-minute flight to a possible safe haven.</string>

<string name="the_raid">The Raid (sebelum diedarkan: Serbuan Maut) adalah film aksi seni bela diri dari Indonesia
yang disutradarai oleh Gareth Evans dan dibintangi oleh Iko Uwais. Pertama kali dipublikasi pada Festival Film
Internasional Toronto (Toronto International Film Festival, TIFF) 2011 sebagai film pembuka untuk kategori Midnight
Madness, para kritikus dan penonton memuji film tersebut sebagai salah satu film aksi terbaik setelah
bertahun-tahun sehingga memperoleh penghargaan The Cadillac People\'s Choice Midnight Madness Award[12].
\n\nTerpilihnya film ini untuk diputar pada beberapa festival film internasional berikutnya, seperti Festival
Film Internasional Dublin Jameson (Irlandia), Festival Film Glasgow (Skotlandia), Festival Film Sundance (Utah, AS),
South by Southwest Film (SXSW, di Austin, Texas, AS), dan Festival Film Busan (Korea Selatan), menjadikannya
sebagai film komersial produksi Indonesia pertama yang paling berhasil di tingkat dunia. \n\nFilm The Raid sebenarnya
adalah ide lanjutan dari keseluruhan cerita yang diinginkan sutradara Gareth Evans. Proyek awalnya, Berandal,
diumumkan tahun 2011 sebelum film "The Raid" dibuat pada tahun yang sama yaitu tahun 2011, tetapi baru dirilis
pada 2014 dengan judul The Raid 2: Berandal.</string>

<string name="the_night_come_for_us">The Night Comes For Us (bahasa Indonesia: "Malam Datang Untuk Kita") adalah
film aksi seru dari Indonesia yang disutradarai oleh Timo Tjahjanto dan dibintangi oleh Joe Taslim. Film ini tayang
perdana pada Fantastic Fest pada tanggal 22 September 2018, yang kemudian ditayangkan melalui jaringan Netflix
pada tanggal 19 Oktober 2018.</string>

<string name="headshot">Headshot adalah sebuah film laga Indonesia yang dirilis pada Desember 2016. Film ini
disutradarai oleh Mo Brothers. Film ini menjadi film pertama Iko Uwais yang disutradarai oleh sutradara asal Indonesia.
\n\nFilm ini mendapatkan empat nominasi pada Festival Film Indonesia 2016 dan berhasil memenangkan dua di antaranya.</string>

<string name="the_raid_2">The Raid 2: Berandal adalah film kejahatan seni bela diri dari Indonesia yang disutradarai oleh
Gareth Evans dan dibintangi oleh Iko Uwais. Film ini adalah sekuel dari film The Raid. Film ini sebenarnya adalah
proyek awal dari keseluruhan cerita The Raid yang diumumkan tahun 2011 sebelum prekuelnya, namun baru dirilis
pada 2014.\n\nSetelah tayang perdana di Festival Film Sundance pada 21 Februari 2014, film The Raid 2: Berandal
akhirnya diumumkan akan tayang serentak di Indonesia dan Amerika Serikat pada tanggal 28 Maret 2014. \n\nIko Uwais
berperan kembali sebagai Rama, perwira pemula satuan senjata dan taktik khusus sekaligus seorang calon ayah.
Selain itu film ini juga dibintangi Alex Abbad, Julie Estelle, Roy Marten, Tio Pakusadewo, Arifin Putra dan
Cecep Arif Rahman. Aktor mancanegara dari Jepang seperti Ryuhei Matsuda, Kenichi Endo, dan Kazuki Kitamura juga
ikut bergabung dalam film ini.</string>

<string name="soekarno">Soekarno adalah film drama Indonesia yang dirilis pada 11 Desember 2013. Film ini dibintangi oleh
Ario Bayu dan Maudy Koesnaedi.</string>

<string name="ada_apa_dengan_cinta">Ada Apa dengan Cinta? adalah sebuah film percintaan Indonesia karya Rudi Soedjarwo
yang dirilis pertama kali pada tanggal 7 Februari 2002 dan dibintangi Nicholas Saputra dan Dian Sastrowardoyo.
\n\nPengambilan gambar dilakukan di beberapa lokasi di kecamatan Gambir, kecamatan Menteng, Kota Jakarta Pusat dan
Kecamatan Kebon Jeruk.</string>

<string name="dilan_1990">Dilan 1990 merupakan film drama Indonesia tahun 2018. Film ini diangkat dari novel Dilan:
Dia adalah Dilanku Tahun 1990 karya Pidi Baiq dan dibintangi oleh Iqbaal Ramadhan dan Vanesha Prescilla. \n\nPara pemain
pendukungnya antara lain Farhan, Ira Wibowo, Tike Priatnakusumah, dan personil grup idola JKT48, Adhisty Zara.
Ridwan Kamil, yang saat rilis film menjabat sebagai Wali Kota Bandung, juga ikut bermain di film ini. Kakak Vanesha,
Sissy Priscillia, menjadi narator film sekaligus suara dari Milea dewasa.</string>

</resources>

themes.xml :
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.HorizontalRecyclerView" parent="Theme.MaterialComponents.Light.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/black</item>
<item name="colorPrimaryVariant">@color/black</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
</resources>


Sekarang kita menentukan isi layout activity_main.xml, seperti yang sudah dikatakan diatas, kita akan memiliki 3 komponen RecyclerView. Untuk memiliki RecyclerView dengan orientasi horizontal, kita hanya perlu menambahkan / merubah nilai dari atribut android:orientation dan android:scrollbars ke horizontal pada komponen RecyclerView.

activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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:background="@color/blackishRed"
tools:context=".MainActivity">

<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="20dp"
app:layout_constraintTop_toTopOf="parent">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:orientation="vertical">

<LinearLayout
android:id="@+id/layoutRvFilmTerlaris"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:background="@drawable/bg_rv"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="10dp">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:fontFamily="serif"
android:text="Film Terlaris"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold" />

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvTerlaris"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:scrollbars="horizontal"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />

</LinearLayout>

<LinearLayout
android:id="@+id/layoutRvFilmTerbaru"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:background="@drawable/bg_rv"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="10dp"
app:layout_constraintTop_toBottomOf="@id/layoutRvFilmTerlaris">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:fontFamily="serif"
android:text="Film Terbaru"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold" />

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvTerbaru"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:scrollbars="horizontal"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />

</LinearLayout>

<LinearLayout
android:id="@+id/layoutRvFilmIndonesia"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:background="@drawable/bg_rv"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="10dp"
app:layout_constraintTop_toBottomOf="@id/layoutRvFilmTerbaru">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:fontFamily="serif"
android:text="Film Indonesia"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold" />

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvIndonesia"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:scrollbars="horizontal"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />

</LinearLayout>

</LinearLayout>

</ScrollView>

</androidx.constraintlayout.widget.ConstraintLayout>


Selanjutnya sebuah layout resource file untuk menempatkan view-view dari atribut film, poster dan judul. Bagi Anda yang belum tahu akses membuat layout baru, klik kanan pada folder layout > New > Layout Resource File, berikan nama seperti dibawah ini :

film_container.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<LinearLayout
android:layout_width="110dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="@drawable/bg_container"
android:orientation="vertical"
android:padding="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

<ImageView
android:id="@+id/posterFilm"
android:layout_width="100dp"
android:layout_height="150dp"
android:layout_marginBottom="5dp"
android:contentDescription="@string/app_name" />

<TextView
android:id="@+id/judulFilm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif"
android:lines="2"
android:textColor="@color/whiteDark"
android:textSize="14sp" />

</LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>


Meskipun disini kita memiliki 3 RecyclerView, namun untuk layout container item dan adapter kita hanya membutuhkan masing-masing satu. Layaknya moto dari Java, WORA - "Write Once, Run Anywhere".

Baik, sebelum membuat model data dan adapter, terlebih dahulu buatlah sebuah activity baru, bagi Anda yang belum tahu akses membuatnya, Anda bisa klik kanan dimana saja kecuali pada Gradle Scripts, kemudian New > Activity > Empty Activity. Jangan lupa klik centang pada Generate Layout File. Berikut isi dari layout dan konteks java dari activity tersebut :

activity_details.xml :
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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:background="@color/blackishRed"
tools:context=".DetailsActivity">

<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">

<ImageView
android:id="@+id/posterFilm"
android:layout_width="200dp"
android:layout_height="300dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="10dp"
android:contentDescription="@string/app_name" />

<TextView
android:id="@+id/judulFilm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:fontFamily="serif"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold" />

<TextView
android:id="@+id/deskripsiFilm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="serif"
android:paddingBottom="20dp"
android:textColor="@color/whiteDark"
android:textSize="16sp" />

</LinearLayout>

</ScrollView>

</androidx.constraintlayout.widget.ConstraintLayout>

DetailsActivity.java :
package com.gwnbs.horizontalrv;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

public class DetailsActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);

ImageView posterFilm = findViewById(R.id.posterFilm);
TextView judulFilm = findViewById(R.id.judulFilm);
TextView deskripsiFilm = findViewById(R.id.deskripsiFilm);

Picasso.get().load(getIntent().getStringExtra("poster")).into(posterFilm);
judulFilm.setText(getIntent().getStringExtra("judul"));
deskripsiFilm.setText(getIntent().getStringExtra("deskripsi"));
}
}


Berikutnya java class baru sebagai getter dan konstruktor dari view-view item Pada RecyclerView. Klik kanan pada folder java > New > Java Class, beri nama dan isikan seperti dibawah ini :

DataModel.java :
package com.gwnbs.horizontalrv;

public class DataModel {

private final String posterFilm;
private final String judulFilm;
private final String deskripsiFilm;

public DataModel (String posterFilm, String judulFilm, String deskripsiFilm) {
this.posterFilm = posterFilm;
this.judulFilm = judulFilm;
this.deskripsiFilm = deskripsiFilm;
}

public String getPosterFilm() {
return posterFilm;
}

public String getJudulFilm() {
return judulFilm;
}

public String getDeskripsiFilm() {
return deskripsiFilm;
}
}


Sekarang java class baru untuk adapter RecyclerView. Tidak ada yang spesial di adapter ini, sama seperti adapter RecyclerView pada tutorial-tutorial RecyclerView sebelumnya. Bedanya mungkin disini kita menambahkan Context di konstruktor karena kita memang memerlukan context untuk mengirimkan intent dan menuju ke context DetailsActivity.java.

RvAdapter.java :
package com.gwnbs.horizontalrv;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.squareup.picasso.Picasso;

import java.util.List;

public class RvAdapter extends RecyclerView.Adapter<RvAdapter.ItemFilmViewHolder>{

private final List<DataModel> dataModels;
private final Context context;

public RvAdapter(List<DataModel> dataModels, Context context) {
this.dataModels = dataModels;
this.context = context;
}

@NonNull
@Override
public ItemFilmViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
return new ItemFilmViewHolder(LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.film_container, viewGroup, false));
}

@Override
public void onBindViewHolder(@NonNull ItemFilmViewHolder holder, int position) {
final DataModel dataModel = dataModels.get(position);

final String baseURL = "https://image.tmdb.org/t/p/w220_and_h330_face/";
Picasso.get().load(baseURL + dataModel.getPosterFilm()).into(holder.posterFilm);

holder.judulFilm.setText(dataModel.getJudulFilm());

holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, DetailsActivity.class);
intent.putExtra("poster", baseURL + dataModel.getPosterFilm());
intent.putExtra("judul", dataModel.getJudulFilm());
intent.putExtra("deskripsi", dataModel.getDeskripsiFilm());
context.startActivity(intent);
}
});
}

static class ItemFilmViewHolder extends RecyclerView.ViewHolder {
ImageView posterFilm;
TextView judulFilm;

ItemFilmViewHolder(@NonNull View itemView) {
super(itemView);
posterFilm = itemView.findViewById(R.id.posterFilm);
judulFilm = itemView.findViewById(R.id.judulFilm);
}
}

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


Harap maklum jika bahasa ada campur-campur Inggris, kadang repot mengartikannya ke bahasa Indonesia. Ya, sebagai programmer tentunya kita harus terbiasa dengan Inggris karena memang semuanya bahasa Inggris. Baik, terakhir di MainActivity.java, seluruh data-data film kita tentukan dari konteks ini, masing-masing RecyclerView pada sebuah metode void private yang kemudian kita panggil di dalam onCreate.

MainActivity.java :
package com.gwnbs.horizontalrv;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

setUpFilmTerlaris();
setUpFilmTerbaru();
setUpFilmIndonesia();
}

private void setUpFilmTerlaris() {
List<DataModel> dataModelTerlaris = new ArrayList<>();
RecyclerView rvTerlaris = findViewById(R.id.rvTerlaris);
rvTerlaris.setHasFixedSize(true);
RvAdapter adapterTerlaris = new RvAdapter(dataModelTerlaris, this);

dataModelTerlaris.add(new DataModel("or06FN3Dka5tukK1e9sl16pB3iy.jpg", "Avengers: Endgame",
getString(R.string.avengers_endgame)));
dataModelTerlaris.add(new DataModel("8Y7WrRK1iQHEX7UIftBeBMjPjWD.jpg", "Avatar",
getString(R.string.avatar)));
dataModelTerlaris.add(new DataModel("AbuyfKTHDp7oHxpMKgtEaIZqoU9.jpg", "Titanic",
getString(R.string.titanic)));
dataModelTerlaris.add(new DataModel("wqnLdwVXoBjKibFRR5U3y0aDUhs.jpg", "Star Wars: The Force Awakens",
getString(R.string.star_wars)));
dataModelTerlaris.add(new DataModel("bxfCEo5a6t6gxUR9EjJLlqCe73i.jpg", "Avengers: Infinity War",
getString(R.string.avengers_infinity_war)));
dataModelTerlaris.add(new DataModel("rhr4y79GpxQF9IsfJItRXVaoGs4.jpg", "Jurassic World",
getString(R.string.jurassic_world)));
dataModelTerlaris.add(new DataModel("pSfwXxP94xktZKn3UaeVe6VdFZl.jpg", "The Lion King",
getString(R.string.the_lion_king)));

rvTerlaris.setAdapter(adapterTerlaris);
}

private void setUpFilmTerbaru() {
List<DataModel> dataModelTerbaru = new ArrayList<>();
RecyclerView rvTerbaru = findViewById(R.id.rvTerbaru);
rvTerbaru.setHasFixedSize(true);
RvAdapter adapterTerbaru = new RvAdapter(dataModelTerbaru, this);

dataModelTerbaru.add(new DataModel("eLT8Cu357VOwBVTitkmlDEg32Fs.jpg", "Jiu Jitsu",
getString(R.string.jiu_jitsu)));
dataModelTerbaru.add(new DataModel("dL6hKVirJgpA2kIl2JOInY1Py1P.jpg", "Fatman",
getString(R.string.fatman)));
dataModelTerbaru.add(new DataModel("6OeGqp18oZucUGziMIRNhLouZ75.jpg", "The Dalton Gang",
getString(R.string.the_dalton_gang)));
dataModelTerbaru.add(new DataModel("k68nPLbIST6NP96JmTxmZijEvCA.jpg", "Tenet",
getString(R.string.tenet)));
dataModelTerbaru.add(new DataModel("9HT9982bzgN5on1sLRmc1GMn6ZC.jpg", "Rogue City",
getString(R.string.rogue_city)));
dataModelTerbaru.add(new DataModel("wVu2B58T61LAMiY68hxAA2NLcr9.jpg", "Greenland",
getString(R.string.greenland)));

rvTerbaru.setAdapter(adapterTerbaru);
}

private void setUpFilmIndonesia() {
List<DataModel> dataModelIndonesia = new ArrayList<>();
RecyclerView rvIndonesia = findViewById(R.id.rvIndonesia);
rvIndonesia.setHasFixedSize(true);
RvAdapter adapterIndonesia = new RvAdapter(dataModelIndonesia, this);

dataModelIndonesia.add(new DataModel("Abnm1Ws3JH0ReCfEhLMPwPcMcGO.jpg", "The Raid",
getString(R.string.the_raid)));
dataModelIndonesia.add(new DataModel("8lI1p5cPqgXN2qrKZrmI3mhKBfs.jpg", "The Night Come For Us",
getString(R.string.the_night_come_for_us)));
dataModelIndonesia.add(new DataModel("lGamnocYl4omp1txOs21OjEmgux.jpg", "Headshot",
getString(R.string.headshot)));
dataModelIndonesia.add(new DataModel("fwEML9xRIOQdNZQYv34kfcU8gE9.jpg", "The Raid 2",
getString(R.string.the_raid_2)));
dataModelIndonesia.add(new DataModel("2DQhccMuqp3PtZLu2LQQjSXSNQV.jpg", "Soekarno",
getString(R.string.soekarno)));
dataModelIndonesia.add(new DataModel("vhl4FQTkUnlGCCCjyNyQFYYgVGE.jpg", "Ada Apa Dengan Cinta",
getString(R.string.ada_apa_dengan_cinta)));
dataModelIndonesia.add(new DataModel("eitRZXfbw6rO0CfP3lPaGgK63qr.jpg", "Dilan 1990",
getString(R.string.dilan_1990)));

rvIndonesia.setAdapter(adapterIndonesia);
}
}


Dan jangan lupa untuk menambahkan Internet permission di AndroidManifest.xml sejajar dengan tag <application>, karena disini kita menggunakan internet untuk memuat gambar poster dari film.

<uses-permission android:name="android.permission.INTERNET" />


Sekian tutorial ini, dan terimakasih atas waktu dan kunjungannya. Jika ada yang ingin disampaikan, silahkan posting di komentar.
Share:

0 comments:

Post a Comment

Hubungi Saya

Name

Email *

Message *

Terlaris 30 Hari Terakhir