- 6 years ago
Below is the RecyclerView widget with necessary attributes.
<
android.support.v7.widget.RecyclerView
android:id
=
"@+id/recycler_view"
android:scrollbars
=
"vertical"
android:layout_width
=
"match_parent"
android:layout_height
=
"wrap_content"
/>
add dependencies in your gradle file
dependencies {
compile 'com.android.support:design:
25.+'
compile 'com.android.support:recyclerview-v7:
25.+'
}
With the latest version of build tools, Android Studio is creating two layout files for each activity. For main activity, it created activity_main.xml (contains CoordinatorLayout and AppBarLayout) and content_VBagemain.xml (for the actual content). Open content_VBagemain.xml and the recycler view widget.
content_vbagemain.xml
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
RelativeLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools
=
"http://schemas.android.com/tools"
xmlns:app
=
"http://schemas.android.com/apk/res-auto"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
app:layout_behavior
=
"@string/appbar_scrolling_view_behavior"
tools:showIn
=
"@layout/activity_main"
tools:context
=
".MainActivity"
>
android.support.v7.widget.RecyclerView
android:id
=
"@+id/recycler_view"
android:layout_width
=
"match_parent"
android:layout_height
=
"wrap_content"
android:scrollbars
=
"vertical"
/>
4. Open colors.xml located under res ⇒ values and add below colors.
|
After adding the RecyclerView widget, let’s start writing the adapter class to render the data. The RecyclerView adapter is same as ListView but the override methods are different.
5. Create a class named Movie.java and declare title, genre and year. Also add the getter/setter methods to each variable.
Movie.java
package
qna.vbagetech.example.recyclerview;
public
class
Movie {
private
String title, genre, year;
public
Movie() {
}
public
Movie(String title, String genre, String year) {
this
.title = title;
this
.genre = genre;
this
.year = year;
}
public
String getTitle() {
return
title;
}
public
void
setTitle(String name) {
this
.title = name;
}
public
String getYear() {
return
year;
}
public
void
setYear(String year) {
this
.year = year;
}
public
String getGenre() {
return
genre;
}
public
void
setGenre(String genre) {
this
.genre = genre;
}
}
6. Create an layout xml named vbmovie_list_row.xml with the below code. This layout file renders a single row in recycler view by displaying movie name, genre and year of release.
vbmovie_list_row.xml
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
RelativeLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
android:focusable
=
"true"
android:paddingLeft
=
"16dp"
android:paddingRight
=
"16dp"
android:paddingTop
=
"10dp"
android:paddingBottom
=
"10dp"
android:clickable
=
"true"
android:background
=
"?android:attr/selectableItemBackground"
android:orientation
=
"vertical"
>
<
TextView
android:id
=
"@+id/title"
android:textColor
=
"@color/title"
android:textSize
=
"16dp"
android:textStyle
=
"bold"
android:layout_alignParentTop
=
"true"
android:layout_width
=
"match_parent"
android:layout_height
=
"wrap_content"
/>
<
TextView
android:id
=
"@+id/genre"
android:layout_below
=
"@id/title"
android:layout_width
=
"match_parent"
android:layout_height
=
"wrap_content"
/>
<
TextView
android:id
=
"@+id/year"
android:textColor
=
"@color/year"
android:layout_width
=
"wrap_content"
android:layout_alignParentRight
=
"true"
android:layout_height
=
"wrap_content"
/>
</
RelativeLayout
>
7. Now create a class named MoviesAdapter.java and add the below code. Here onCreateViewHolder()method inflates movie_list_row.xml. In onBindViewHolder() method the appropriate movie data (title, genre and year) set to each row.
MoviesAdapter.java
package
qna.vbagetech.example.recyclerview;
import
android.support.v7.widget.RecyclerView;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.TextView;
import
java.util.List;
public
class VB
Adapter
extends
RecyclerView.Adapter<VBAdapter.MyViewHolder> {
private
List<Movie> moviesList;
public
class
MyViewHolder
extends
RecyclerView.ViewHolder {
public
TextView title_vb, year_vb, genre_vb;
public
MyViewHolder(View view) {
super
(view);
title_vb = (TextView) view.findViewById(R.id.title_vb);
genre_vb = (TextView) view.findViewById(R.id.genre_vb);
year_vb = (TextView) view.findViewById(R.id.year_vb);
}
}
public
MoviesAdapter(List<Movie> moviesList) {
this
.moviesList = moviesList;
}
@Override
public
MyViewHolder onCreateViewHolder(ViewGroup parent,
int
viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.vbmovie_list_row, parent,
false
);
return
new
MyViewHolder(itemView);
}
@Override
public
void
onBindViewHolder(MyViewHolder holder,
int
position) {
Movie movie = moviesList.get(position);
holder.title_vb.setText(movie.getTitle());
holder.genre_vb.setText(movie.getGenre());
holder.year_vb.setText(movie.getYear());
}
@Override
public
int
getItemCount() {
return
moviesList.size();
}
}
8. Now open MainActivity.java and do the below changes. Here prepareMovieData() method adds sample data to list view.
MainActivity.java
package
qna.vbagetech.example.recyclerview;
import
android.content.Context;
import
android.os.Bundle;
import
android.support.v7.app.AppCompatActivity;
import
android.support.v7.widget.DefaultItemAnimator;
import
android.support.v7.widget.LinearLayoutManager;
import
android.support.v7.widget.RecyclerView;
import
android.support.v7.widget.Toolbar;
import
android.view.GestureDetector;
import
android.view.MotionEvent;
import
android.view.View;
import
android.widget.Toast;
import
java.util.ArrayList;
import
java.util.List;
public
class
MainActivity
extends
AppCompatActivity {
private
List<Movie> movieList =
new
ArrayList<>();
private
RecyclerView recyclerView;
private
MoviesAdapter mAdapter;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mAdapter =
new
MoviesAdapter(movieList);
RecyclerView.LayoutManager mLayoutManager =
new
LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(
new
DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
prepareMovieData();
}
private
void
prepareMovieData() {
Movie movie =
new
Movie(
"Mad Max: Fury Road"
,
"Action & Adventure"
,
"2015"
);
movieList.add(movie);
movie =
new
Movie(
"Inside Out"
,
"Animation, Kids & Family"
,
"2015"
);
movieList.add(movie);
movie =
new
Movie(
"Star Wars: Episode VII - The Force Awakens"
,
"Action"
,
"2015"
);
movieList.add(movie);
movie =
new
Movie(
"Shaun the Sheep"
,
"Animation"
,
"2015"
);
movieList.add(movie);
movie =
new
Movie(
"The Martian"
,
"Science Fiction & Fantasy"
,
"2015"
);
movieList.add(movie);
movie =
new
Movie(
"Mission: Impossible Rogue Nation"
,
"Action"
,
"2015"
);
movieList.add(movie);
movie =
new
Movie(
"Up"
,
"Animation"
,
"2009"
);
movieList.add(movie);
movie =
new
Movie(
"Star Trek"
,
"Science Fiction"
,
"2009"
);
movieList.add(movie);
movie =
new
Movie(
"The LEGO Movie"
,
"Animation"
,
"2014"
);
movieList.add(movie);
movie =
new
Movie(
"Iron Man"
,
"Action & Adventure"
,
"2008"
);
movieList.add(movie);
movie =
new
Movie(
"Aliens"
,
"Science Fiction"
,
"1986"
);
movieList.add(movie);
movie =
new
Movie(
"Chicken Run"
,
"Animation"
,
"2000"
);
movieList.add(movie);
movie =
new
Movie(
"Back to the Future"
,
"Science Fiction"
,
"1985"
);
movieList.add(movie);
movie =
new
Movie(
"Raiders of the Lost Ark"
,
"Action & Adventure"
,
"1981"
);
movieList.add(movie);
movie =
new
Movie(
"Goldfinger"
,
"Action & Adventure"
,
"1965"
);
movieList.add(movie);
movie =
new
Movie(
"Guardians of the Galaxy"
,
"Science Fiction & Fantasy"
,
"2014"
);
movieList.add(movie);
mAdapter.notifyDataSetChanged();
}
}
Hot Questions