Skip to content

Commit 8ad424c

Browse files
committed
Implement horizontal recycler view to display list of Cast members
1 parent cff97d5 commit 8ad424c

File tree

5 files changed

+125
-23
lines changed

5 files changed

+125
-23
lines changed

app/src/main/java/com/carboni/cinebuff/MovieDetailActivity.java

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,18 @@
44
import android.os.Bundle;
55
import android.support.constraint.ConstraintLayout;
66
import android.support.v7.app.AppCompatActivity;
7+
import android.support.v7.widget.LinearLayoutManager;
8+
import android.support.v7.widget.RecyclerView;
79
import android.support.v7.widget.Toolbar;
810
import android.view.MenuItem;
911
import android.view.View;
1012
import android.widget.ImageView;
13+
import android.widget.LinearLayout;
1114
import android.widget.ProgressBar;
1215
import android.widget.TextView;
1316

1417
import com.bumptech.glide.Glide;
18+
import com.carboni.cinebuff.adapter.CastListAdapter;
1519
import com.carboni.cinebuff.model.Cast;
1620
import com.carboni.cinebuff.model.Crew;
1721
import com.carboni.cinebuff.model.Genre;
@@ -42,8 +46,15 @@ public class MovieDetailActivity extends AppCompatActivity implements MovieDetai
4246
TextView movie_genres;
4347
@BindView(R.id.movie_detail_director)
4448
TextView movie_director;
49+
@BindView(R.id.movie_detail_writer)
50+
TextView movie_writer;
4551
@BindView(R.id.movie_detail_loading)
4652
ProgressBar loading;
53+
@BindView(R.id.movie_detail_cast)
54+
RecyclerView cast_recycler_view;
55+
56+
private RecyclerView.Adapter castAdapter;
57+
private RecyclerView.LayoutManager layoutManager;
4758

4859
MovieDetailPresenter presenter;
4960

@@ -53,15 +64,17 @@ protected void onCreate(Bundle savedInstanceState) {
5364
setContentView(R.layout.movie_detail);
5465
ButterKnife.bind(this);
5566

56-
presenter = new MovieDetailPresenter(this);
57-
5867
Intent intent = getIntent();
5968
String title = intent.getStringExtra("MOVIE_TITLE");
6069
String image_url = intent.getStringExtra("MOVIE_IMAGE_URL");
6170
int movie_id = intent.getIntExtra("MOVIE_ID", 0);
6271

72+
presenter = new MovieDetailPresenter(this);
6373
presenter.attemptSearch(movie_id + "");
6474

75+
layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
76+
cast_recycler_view.setLayoutManager(layoutManager);
77+
6578
toolbar.setTitle(title);
6679
setSupportActionBar(toolbar);
6780
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@@ -80,9 +93,6 @@ public void showSuccess(MovieDetailAndCredits o) {
8093
MovieCredits credits = o.credits;
8194
List<Cast> cast = credits.getCast();
8295
List<Crew> crew = credits.getCrew();
83-
84-
// this is where I would set adapters for the list of cast and crew
85-
8696
List<Genre> genres = movie.getGenres();
8797
String all_genres = "";
8898
for (Genre genre : genres) {
@@ -94,13 +104,21 @@ public void showSuccess(MovieDetailAndCredits o) {
94104
movie_genres.setText(all_genres);
95105

96106
// TODO: This is terrible, we can figure out a better way to get director
97-
String dir = "";
107+
String dir = "", writ = "";
98108
for (Crew member : crew) {
99109
if (member.getJob().toString().equals("Director")) {
100110
dir = member.getName();
101111
}
112+
if (member.getJob().toString().equals("Screenplay") || member.getJob().toString().equals("Writer")) {
113+
writ = member.getName();
114+
}
102115
}
103-
movie_director.setText("DIRECTOR: " + dir);
116+
movie_director.setText("DIRECTOR: " + dir); // Again, terrible practice
117+
movie_writer.setText("WRITER: " + writ);
118+
119+
// Cast list recycler view
120+
castAdapter = new CastListAdapter(cast, this); //TODO : Set up click listener
121+
cast_recycler_view.setAdapter(castAdapter);
104122

105123
loading.setVisibility(View.GONE);
106124
details_view.setVisibility(View.VISIBLE); // TODO: Animate this view in from bottom (See Plaid)
Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
package com.carboni.cinebuff.adapter;
22

3+
import android.content.Context;
34
import android.support.v7.widget.RecyclerView;
5+
import android.view.LayoutInflater;
46
import android.view.View;
57
import android.view.ViewGroup;
8+
import android.widget.ImageView;
9+
import android.widget.TextView;
610

11+
import com.bumptech.glide.Glide;
12+
import com.carboni.cinebuff.CircleTransformation;
13+
import com.carboni.cinebuff.R;
714
import com.carboni.cinebuff.model.Cast;
815

916
import java.util.List;
@@ -14,27 +21,48 @@
1421

1522
public class CastListAdapter extends RecyclerView.Adapter<CastListAdapter.ViewHolder> {
1623
private List<Cast> list;
24+
Context context;
1725

1826
public class ViewHolder extends RecyclerView.ViewHolder {
27+
public ImageView castImage;
28+
public TextView castName;
29+
1930
public ViewHolder(View itemView) {
2031
super(itemView);
32+
castImage = (ImageView) itemView.findViewById(R.id.movie_detail_cast_image_view);
33+
castName = (TextView) itemView.findViewById(R.id.movie_detail_cast_name);
2134
}
2235
}
2336

37+
public CastListAdapter(List<Cast> list, Context context) {
38+
this.list = list;
39+
this.context = context;
40+
}
41+
2442
@Override
2543
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
26-
return null;
44+
View view = LayoutInflater.from(context).inflate(R.layout.movie_detail_cast_list_item, parent, false);
45+
ViewHolder viewHolder = new ViewHolder(view);
46+
return viewHolder;
2747
}
2848

2949
@Override
30-
public void onBindViewHolder(ViewHolder holder, int position) {
31-
50+
public void onBindViewHolder(final ViewHolder holder, int position) {
51+
final Cast castMember = list.get(position);
52+
holder.castName.setText(castMember.getName());
53+
Glide
54+
.with(context)
55+
.load("https://image.tmdb.org/t/p/w500" + castMember.getProfilePath())
56+
.placeholder(R.mipmap.ic_person_placeholder)
57+
.crossFade()
58+
.centerCrop()
59+
.transform(new CircleTransformation(context))
60+
.into(holder.castImage);
3261
}
3362

3463
@Override
3564
public int getItemCount() {
36-
return 0;
65+
return list.size();
3766
}
3867

39-
4068
}

app/src/main/res/layout/content_movie_detail.xml

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,28 +36,26 @@
3636
android:id="@+id/movie_detail_summary"
3737
android:layout_width="wrap_content"
3838
android:layout_height="wrap_content"
39-
android:layout_marginEnd="16dp"
40-
android:layout_marginStart="16dp"
41-
android:layout_marginTop="16dp"
39+
android:layout_marginEnd="8dp"
40+
android:layout_marginStart="8dp"
41+
android:layout_marginTop="8dp"
42+
android:gravity="center"
4243
android:text="SUMMARY"
44+
android:textStyle="italic"
4345
app:layout_constraintLeft_toLeftOf="parent"
4446
app:layout_constraintRight_toRightOf="parent"
45-
app:layout_constraintTop_toBottomOf="@+id/movie_detail_director" />
47+
app:layout_constraintTop_toBottomOf="@+id/movie_detail_genres" />
4648

4749
<TextView
4850
android:id="@+id/movie_detail_tagline"
4951
android:layout_width="wrap_content"
5052
android:layout_height="wrap_content"
51-
android:layout_marginEnd="32dp"
52-
android:layout_marginLeft="32dp"
53-
android:layout_marginRight="32dp"
54-
android:layout_marginStart="32dp"
55-
android:layout_marginTop="32dp"
5653
android:fontFamily="sans-serif-condensed"
5754
android:gravity="center_horizontal"
5855
android:text="TAGLINE"
5956
android:textAllCaps="true"
6057
android:textSize="32sp"
58+
android:visibility="gone"
6159
app:layout_constraintLeft_toLeftOf="parent"
6260
app:layout_constraintRight_toRightOf="parent"
6361
app:layout_constraintTop_toBottomOf="@+id/movie_detail_summary" />
@@ -79,14 +77,47 @@
7977
android:id="@+id/movie_detail_director"
8078
android:layout_width="wrap_content"
8179
android:layout_height="wrap_content"
82-
android:layout_marginEnd="64dp"
80+
android:layout_marginTop="16dp"
8381
android:text="DIRECTOR"
8482
android:textAllCaps="true"
8583
android:textStyle="bold"
84+
app:layout_constraintLeft_toLeftOf="parent"
85+
app:layout_constraintTop_toBottomOf="@+id/movie_detail_summary" />
86+
87+
<TextView
88+
android:id="@+id/movie_detail_writer"
89+
android:layout_width="wrap_content"
90+
android:layout_height="wrap_content"
91+
android:layout_marginTop="8dp"
92+
android:text="WRITER"
93+
android:textAllCaps="true"
94+
android:textStyle="bold"
95+
app:layout_constraintLeft_toLeftOf="parent"
96+
app:layout_constraintTop_toBottomOf="@+id/movie_detail_director" />
97+
98+
<TextView
99+
android:id="@+id/movie_detail_cast_header"
100+
android:layout_width="wrap_content"
101+
android:layout_height="wrap_content"
102+
android:layout_marginTop="8dp"
103+
android:text="@string/movie_detail_cast_header"
104+
android:textAllCaps="true"
105+
android:textStyle="bold"
86106
app:layout_constraintHorizontal_bias="0.0"
87107
app:layout_constraintLeft_toLeftOf="parent"
88108
app:layout_constraintRight_toRightOf="parent"
89-
app:layout_constraintTop_toBottomOf="@id/movie_detail_genres" />
109+
app:layout_constraintTop_toBottomOf="@+id/movie_detail_writer" />
90110

111+
<android.support.v7.widget.RecyclerView
112+
android:id="@+id/movie_detail_cast"
113+
android:layout_width="0dp"
114+
android:layout_height="wrap_content"
115+
android:layout_marginBottom="128dp"
116+
android:layout_marginTop="8dp"
117+
android:clipToPadding="false"
118+
app:layout_constraintBottom_toBottomOf="parent"
119+
app:layout_constraintLeft_toLeftOf="parent"
120+
app:layout_constraintRight_toRightOf="parent"
121+
app:layout_constraintTop_toBottomOf="@+id/movie_detail_cast_header" />
91122
</android.support.constraint.ConstraintLayout>
92123
</android.support.v4.widget.NestedScrollView>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:layout_width="wrap_content"
4+
android:layout_height="match_parent"
5+
android:layout_margin="8dp"
6+
android:orientation="vertical">
7+
8+
<ImageView
9+
android:id="@+id/movie_detail_cast_image_view"
10+
android:layout_width="88dp"
11+
android:layout_height="wrap_content"
12+
android:layout_alignParentTop="true"
13+
android:layout_centerInParent="true"
14+
android:adjustViewBounds="true" />
15+
16+
<TextView
17+
android:id="@+id/movie_detail_cast_name"
18+
android:layout_width="72dp"
19+
android:layout_height="wrap_content"
20+
android:layout_below="@id/movie_detail_cast_image_view"
21+
android:layout_centerInParent="true"
22+
android:ellipsize="end"
23+
android:maxLines="1" />
24+
</RelativeLayout>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@
1212
<string name="movie_detail_summary">
1313
"\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laborisnisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, suntin culpa qui officia deserunt mollit anim id est laborum."
1414
</string>
15+
<string name="movie_detail_cast_header">cast</string>
1516
</resources>

0 commit comments

Comments
 (0)