Android 如何使用单个适配器在回收器视图中加载不同的布局
感谢您抽出时间阅读我的问题。 我一直在一个项目中工作,我必须在recyclerView中加载许多布局 待详细说明,回收者列表视图将包含Android 如何使用单个适配器在回收器视图中加载不同的布局,android,android-recyclerview,Android,Android Recyclerview,感谢您抽出时间阅读我的问题。 我一直在一个项目中工作,我必须在recyclerView中加载许多布局 待详细说明,回收者列表视图将包含 ----电影布局---(顶部) ----影院布局---(电影布局下方) ----大片---(剧院布局下方) 我就这样设计的, 具有回收器视图的活动 通用适配器 三个Pojo类 三种布局 我使用的代码 我的Pojo(所有三个Pojo的设计都一样) 我的RecyclerView适配器 public class MoviesAdapter extends Re
- ----电影布局---(顶部)
- ----影院布局---(电影布局下方)
- ----大片---(剧院布局下方)
- 具有回收器视图的活动
- 通用适配器
- 三个Pojo类
- 三种布局
public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MyViewHolder> {
private List<Movie> moviesList;
private List<Movie1> moviesList1;
final int Movie = 0, Movie1 = 1;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title, year, genre;
public MyViewHolder(View view, int viewType) {
super(view);
title = (TextView) view.findViewById(R.id.title);
genre = (TextView) view.findViewById(R.id.genre);
year = (TextView) view.findViewById(R.id.year);
}
}
public class MyViewHolder2 extends RecyclerView.ViewHolder {
public TextView title, year, genre;
public MyViewHolder2(View view, int Viewtype) {
super(view);
title = (TextView) view.findViewById(R.id.title);
genre = (TextView) view.findViewById(R.id.genre);
year = (TextView) view.findViewById(R.id.year);
}
}
@Override
public int getItemViewType(int position) {
if (moviesList.get(position) instanceof Movie) {
return Movie;
} else if (moviesList1.get(position) instanceof Movie1) {
return Movie1;
}
return -1;
}
public MoviesAdapter(List<Movie> moviesList, List<Movie1> moviesList1) {
this.moviesList = moviesList;
this.moviesList1 = moviesList1;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v;
MyViewHolder vh = null;
// create a new view
switch (viewType) {
case Movie: //This would be the header view in my Recycler
System.out.println("This is movie");
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.movie_list_row, parent, false);
vh = new MyViewHolder(v, viewType);
return vh;
case Movie1: //This would be the header view in my Recycler
System.out.println("This is movie1");
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.movie_row, parent, false);
vh = new MyViewHolder(v, viewType);
return vh;
default: //This would be the normal list with the pictures of the places in the world
return vh;
}
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
/* if (position == 0) {
Movie movie = moviesList.get(position);
holder.title.setText(movie.getTitle());
holder.genre.setText(movie.getTitle());
holder.year.setText(movie.getTitle());
//this means it is beyond the headerview now as it is no longer 0. For testing purposes, I'm alternating between two pics for now
} else if (position == 1) {
Movie1 movie = moviesList1.get(position);
holder.title.setText(movie.getTitle());
holder.genre.setText(movie.getGenre());
holder.year.setText(movie.getYear());
}*/
switch (holder.getItemViewType()) {
case Movie:
MyViewHolder vh1 = (MyViewHolder) holder;
Movie movie = (Movie) moviesList.get(position);
vh1.title.setText(movie.getTitle());
vh1.genre.setText(movie.getGenre());
vh1.year.setText(movie.getYear());
break;
case Movie1:
MyViewHolder vh2 = (MyViewHolder) holder;
Movie1 movie1=(Movie1)moviesList1.get(position);
vh2.title.setText(movie1.getTitle());
vh2.year.setText(movie1.getYear());
vh2.genre.setText(movie1.getGenre());
break;
default:
break;
}
}
@Override
public int getItemCount() {
return moviesList.size();
}
public class ComplexRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
// The items to display in your RecyclerView
private List<Object> items;
private final int MOVIE= 0,THEATERS=1 , BLOCKBUSTER = 2;
// Provide a suitable constructor (depends on the kind of dataset)
public ComplexRecyclerViewAdapter(List<Object> items) {
this.items = items;
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return this.items.size();
}
@Override
public int getItemViewType(int position) {
if (items.get(position) instanceof Movie) {
return MOVIE;
} else if (items.get(position) instanceof Theatrs ) {
return THEATERS;
}else if (items.get(position) instanceof Blockbuster ) {
return BLOCKBUSTER ;
}
return -1;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
RecyclerView.ViewHolder viewHolder;
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
switch (viewType) {
case MOVIE:
View v1 = inflater.inflate(R.layout.movie_viewholder, viewGroup, false);
viewHolder = new ViewHolder1(v1);
break;
case THEATERS:
View v2 = inflater.inflate(R.layout.theater_viewholder2, viewGroup, false);
viewHolder = new ViewHolder2(v2);
break;
case BLOCKBUSTER :
View v3 = inflater.inflate(R.layout.layout_blockbuster, viewGroup, false);
viewHolder = new ViewHolder3(v3);
break;
default:
View v = inflater.inflate(android.R.layout.simple_list_item_1, viewGroup, false);
viewHolder = new RecyclerViewSimpleTextViewHolder(v);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
switch (viewHolder.getItemViewType()) {
case MOVIE:
ViewHolder1 vh1 = (ViewHolder1) viewHolder;
configureViewHolder1(vh1, position);
break;
case THEATERS:
ViewHolder2 vh2 = (ViewHolder2) viewHolder;
configureViewHolder2(vh2, position);
break;
case BLOCKBUSTER :
ViewHolder3 vh3 = (ViewHolder3) viewHolder;
configureViewHolder3(vh3, position);
break;
default:
RecyclerViewSimpleTextViewHolder vh = (RecyclerViewSimpleTextViewHolder) viewHolder;
configureDefaultViewHolder(vh, position);
break;
}
}
}
和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);}
运行程序后,仅在“我的回收器”视图中加载第一个布局。任何帮助都会对我学习这些东西大有帮助
谢谢 首先检查正常布局,然后检查内容是否正确连接,或者没有看到布局的xml代码 我的主要怀疑是getItemCount()方法,您只返回一个列表的计数,我在recyclerview中看到了许多其他多个布局的实现,其中大多数使用单个列表,并将一些字段设置为null,在onBindviewholder中仅检索特定布局所需的字段,希望这有所帮助
List<CityEvent> list = new ArrayList<>();
list.add(new CityEvent("London", null, CityEvent.CITY_TYPE));
list.add(new CityEvent("Droidcon", "Droidcon in London", CityEvent.EVENT_TYPE));
list.add(new CityEvent("Some event", "Some event in London", CityEvent.EVENT_TYPE));
list.add(new CityEvent("Amsterdam", null, CityEvent.CITY_TYPE));
list.add(new CityEvent("Droidcon", "Droidcon in Amsterdam", CityEvent.EVENT_TYPE));
list.add(new CityEvent("Berlin", null, CityEvent.CITY_TYPE));
list.add(new CityEvent("Droidcon", "Droidcon in Berlin", CityEvent.EVENT_TYPE));
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
CityEvent object = mList.get(position);
if (object != null) {
switch (object.getType()) {
case CITY_TYPE:
((CityViewHolder) holder).mTitle.setText(object.getName());
break;
case EVENT_TYPE:
((EventViewHolder) holder).mTitle.setText(object.getName());
((EventViewHolder) holder).mDescription.setText(object.getDescription());
break;
}
}
}
@Override
public int getItemCount() {
if (mList == null)
return 0;
return mList.size();
}
List List=new ArrayList();
添加(新CityEvent(“伦敦”,空,CityEvent.CITY_类型));
添加(新的CityEvent(“Droidcon”,“伦敦Droidcon”,CityEvent.EVENT_类型));
添加(新的CityEvent(“某些事件”,“伦敦的某些事件”,CityEvent.event_类型));
添加(新CityEvent(“阿姆斯特丹”,空,CityEvent.CITY_类型));
添加(新CityEvent(“Droidcon”,“阿姆斯特丹Droidcon”,CityEvent.EVENT_类型));
添加(新CityEvent(“Berlin”,null,CityEvent.CITY_TYPE));
添加(新CityEvent(“Droidcon”,“柏林Droidcon”,CityEvent.EVENT_类型));
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
CityEvent对象=mList.get(位置);
if(对象!=null){
开关(object.getType()){
案例城市类型:
((CityViewHolder)holder.mTitle.setText(object.getName());
打破
案例事件类型:
((EventViewHolder)holder.mTitle.setText(object.getName());
((EventViewHolder)holder.mDescription.setText(object.getDescription());
打破
}
}
}
@凌驾
public int getItemCount(){
if(mList==null)
返回0;
返回mList.size();
}
首先检查正常布局,然后检查所有内容是否正确连接,或者看不到布局的xml代码
我的主要怀疑是getItemCount()方法,您只返回一个列表的计数,我在recyclerview中看到了许多其他多个布局的实现,其中大多数使用单个列表,并将一些字段设置为null,在onBindviewholder中仅检索特定布局所需的字段,希望这有所帮助
List<CityEvent> list = new ArrayList<>();
list.add(new CityEvent("London", null, CityEvent.CITY_TYPE));
list.add(new CityEvent("Droidcon", "Droidcon in London", CityEvent.EVENT_TYPE));
list.add(new CityEvent("Some event", "Some event in London", CityEvent.EVENT_TYPE));
list.add(new CityEvent("Amsterdam", null, CityEvent.CITY_TYPE));
list.add(new CityEvent("Droidcon", "Droidcon in Amsterdam", CityEvent.EVENT_TYPE));
list.add(new CityEvent("Berlin", null, CityEvent.CITY_TYPE));
list.add(new CityEvent("Droidcon", "Droidcon in Berlin", CityEvent.EVENT_TYPE));
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
CityEvent object = mList.get(position);
if (object != null) {
switch (object.getType()) {
case CITY_TYPE:
((CityViewHolder) holder).mTitle.setText(object.getName());
break;
case EVENT_TYPE:
((EventViewHolder) holder).mTitle.setText(object.getName());
((EventViewHolder) holder).mDescription.setText(object.getDescription());
break;
}
}
}
@Override
public int getItemCount() {
if (mList == null)
return 0;
return mList.size();
}
List List=new ArrayList();
添加(新CityEvent(“伦敦”,空,CityEvent.CITY_类型));
添加(新的CityEvent(“Droidcon”,“伦敦Droidcon”,CityEvent.EVENT_类型));
添加(新的CityEvent(“某些事件”,“伦敦的某些事件”,CityEvent.event_类型));
添加(新CityEvent(“阿姆斯特丹”,空,CityEvent.CITY_类型));
添加(新CityEvent(“Droidcon”,“阿姆斯特丹Droidcon”,CityEvent.EVENT_类型));
添加(新CityEvent(“Berlin”,null,CityEvent.CITY_TYPE));
添加(新CityEvent(“Droidcon”,“柏林Droidcon”,CityEvent.EVENT_类型));
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
CityEvent对象=mList.get(位置);
if(对象!=null){
开关(object.getType()){
案例城市类型:
((CityViewHolder)holder.mTitle.setText(object.getName());
打破
案例事件类型:
((EventViewHolder)holder.mTitle.setText(object.getName());
((EventViewHolder)holder.mDescription.setText(object.getDescription());
打破
}
}
}
@凌驾
public int getItemCount(){
if(mList==null)
返回0;
返回mList.size();
}
用更复杂的回收服务适配器替换SimpleItemRecycleServiceAdapter
,它可以根据项目视图类型对不同类型的布局进行调整。
例如,RecycleServiceActivity
需要包含一个对象列表,如下所示:
private ArrayList<Object> getSampleArrayList() {
ArrayList<Object> items = new ArrayList<>();
items.add(new Movie ("Mad Max: Fury Road", "Action & Adventure", "2015"));
items.add(new Theatres ("Something", "something"));
items.add(new Blockbuster ("Something else", "Something else"));
return items;
}
等等
之后,您需要创建ComplexRecycleServiceAdapter
public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MyViewHolder> {
private List<Movie> moviesList;
private List<Movie1> moviesList1;
final int Movie = 0, Movie1 = 1;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title, year, genre;
public MyViewHolder(View view, int viewType) {
super(view);
title = (TextView) view.findViewById(R.id.title);
genre = (TextView) view.findViewById(R.id.genre);
year = (TextView) view.findViewById(R.id.year);
}
}
public class MyViewHolder2 extends RecyclerView.ViewHolder {
public TextView title, year, genre;
public MyViewHolder2(View view, int Viewtype) {
super(view);
title = (TextView) view.findViewById(R.id.title);
genre = (TextView) view.findViewById(R.id.genre);
year = (TextView) view.findViewById(R.id.year);
}
}
@Override
public int getItemViewType(int position) {
if (moviesList.get(position) instanceof Movie) {
return Movie;
} else if (moviesList1.get(position) instanceof Movie1) {
return Movie1;
}
return -1;
}
public MoviesAdapter(List<Movie> moviesList, List<Movie1> moviesList1) {
this.moviesList = moviesList;
this.moviesList1 = moviesList1;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v;
MyViewHolder vh = null;
// create a new view
switch (viewType) {
case Movie: //This would be the header view in my Recycler
System.out.println("This is movie");
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.movie_list_row, parent, false);
vh = new MyViewHolder(v, viewType);
return vh;
case Movie1: //This would be the header view in my Recycler
System.out.println("This is movie1");
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.movie_row, parent, false);
vh = new MyViewHolder(v, viewType);
return vh;
default: //This would be the normal list with the pictures of the places in the world
return vh;
}
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
/* if (position == 0) {
Movie movie = moviesList.get(position);
holder.title.setText(movie.getTitle());
holder.genre.setText(movie.getTitle());
holder.year.setText(movie.getTitle());
//this means it is beyond the headerview now as it is no longer 0. For testing purposes, I'm alternating between two pics for now
} else if (position == 1) {
Movie1 movie = moviesList1.get(position);
holder.title.setText(movie.getTitle());
holder.genre.setText(movie.getGenre());
holder.year.setText(movie.getYear());
}*/
switch (holder.getItemViewType()) {
case Movie:
MyViewHolder vh1 = (MyViewHolder) holder;
Movie movie = (Movie) moviesList.get(position);
vh1.title.setText(movie.getTitle());
vh1.genre.setText(movie.getGenre());
vh1.year.setText(movie.getYear());
break;
case Movie1:
MyViewHolder vh2 = (MyViewHolder) holder;
Movie1 movie1=(Movie1)moviesList1.get(position);
vh2.title.setText(movie1.getTitle());
vh2.year.setText(movie1.getYear());
vh2.genre.setText(movie1.getGenre());
break;
default:
break;
}
}
@Override
public int getItemCount() {
return moviesList.size();
}
public class ComplexRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
// The items to display in your RecyclerView
private List<Object> items;
private final int MOVIE= 0,THEATERS=1 , BLOCKBUSTER = 2;
// Provide a suitable constructor (depends on the kind of dataset)
public ComplexRecyclerViewAdapter(List<Object> items) {
this.items = items;
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return this.items.size();
}
@Override
public int getItemViewType(int position) {
if (items.get(position) instanceof Movie) {
return MOVIE;
} else if (items.get(position) instanceof Theatrs ) {
return THEATERS;
}else if (items.get(position) instanceof Blockbuster ) {
return BLOCKBUSTER ;
}
return -1;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
RecyclerView.ViewHolder viewHolder;
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
switch (viewType) {
case MOVIE:
View v1 = inflater.inflate(R.layout.movie_viewholder, viewGroup, false);
viewHolder = new ViewHolder1(v1);
break;
case THEATERS:
View v2 = inflater.inflate(R.layout.theater_viewholder2, viewGroup, false);
viewHolder = new ViewHolder2(v2);
break;
case BLOCKBUSTER :
View v3 = inflater.inflate(R.layout.layout_blockbuster, viewGroup, false);
viewHolder = new ViewHolder3(v3);
break;
default:
View v = inflater.inflate(android.R.layout.simple_list_item_1, viewGroup, false);
viewHolder = new RecyclerViewSimpleTextViewHolder(v);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
switch (viewHolder.getItemViewType()) {
case MOVIE:
ViewHolder1 vh1 = (ViewHolder1) viewHolder;
configureViewHolder1(vh1, position);
break;
case THEATERS:
ViewHolder2 vh2 = (ViewHolder2) viewHolder;
configureViewHolder2(vh2, position);
break;
case BLOCKBUSTER :
ViewHolder3 vh3 = (ViewHolder3) viewHolder;
configureViewHolder3(vh3, position);
break;
default:
RecyclerViewSimpleTextViewHolder vh = (RecyclerViewSimpleTextViewHolder) viewHolder;
configureDefaultViewHolder(vh, position);
break;
}
}
}
运行程序之前的最后一个重要更改是将RecycleServiceActivity
中的bindDataToAdapter
方法更改为设置ComplexRecycleServiceAdapter
而不是SimpleItemRecycleServiceAdapter
,如下所示:
private void bindDataToAdapter() {
// Bind adapter to recycler view object
recyclerView.setAdapter(new ComplexRecyclerViewAdapter(getSampleArrayList()));
}
将SimpleItemRecycleWebAdapter替换为更复杂的ComplexRecycleWebAdapter
,它完成了根据项目视图类型展开不同类型布局的所有繁重工作。
例如,RecycleServiceActivity
需要包含一个对象列表,如下所示:
private ArrayList<Object> getSampleArrayList() {
ArrayList<Object> items = new ArrayList<>();
items.add(new Movie ("Mad Max: Fury Road", "Action & Adventure", "2015"));
items.add(new Theatres ("Something", "something"));
items.add(new Blockbuster ("Something else", "Something else"));
return items;
}
等等
之后,您需要创建ComplexRecycleServiceAdapter
public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MyViewHolder> {
private List<Movie> moviesList;
private List<Movie1> moviesList1;
final int Movie = 0, Movie1 = 1;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title, year, genre;
public MyViewHolder(View view, int viewType) {
super(view);
title = (TextView) view.findViewById(R.id.title);
genre = (TextView) view.findViewById(R.id.genre);
year = (TextView) view.findViewById(R.id.year);
}
}
public class MyViewHolder2 extends RecyclerView.ViewHolder {
public TextView title, year, genre;
public MyViewHolder2(View view, int Viewtype) {
super(view);
title = (TextView) view.findViewById(R.id.title);
genre = (TextView) view.findViewById(R.id.genre);
year = (TextView) view.findViewById(R.id.year);
}
}
@Override
public int getItemViewType(int position) {
if (moviesList.get(position) instanceof Movie) {
return Movie;
} else if (moviesList1.get(position) instanceof Movie1) {
return Movie1;
}
return -1;
}
public MoviesAdapter(List<Movie> moviesList, List<Movie1> moviesList1) {
this.moviesList = moviesList;
this.moviesList1 = moviesList1;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v;
MyViewHolder vh = null;
// create a new view
switch (viewType) {
case Movie: //This would be the header view in my Recycler
System.out.println("This is movie");
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.movie_list_row, parent, false);
vh = new MyViewHolder(v, viewType);
return vh;
case Movie1: //This would be the header view in my Recycler
System.out.println("This is movie1");
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.movie_row, parent, false);
vh = new MyViewHolder(v, viewType);
return vh;
default: //This would be the normal list with the pictures of the places in the world
return vh;
}
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
/* if (position == 0) {
Movie movie = moviesList.get(position);
holder.title.setText(movie.getTitle());
holder.genre.setText(movie.getTitle());
holder.year.setText(movie.getTitle());
//this means it is beyond the headerview now as it is no longer 0. For testing purposes, I'm alternating between two pics for now
} else if (position == 1) {
Movie1 movie = moviesList1.get(position);
holder.title.setText(movie.getTitle());
holder.genre.setText(movie.getGenre());
holder.year.setText(movie.getYear());
}*/
switch (holder.getItemViewType()) {
case Movie:
MyViewHolder vh1 = (MyViewHolder) holder;
Movie movie = (Movie) moviesList.get(position);
vh1.title.setText(movie.getTitle());
vh1.genre.setText(movie.getGenre());
vh1.year.setText(movie.getYear());
break;
case Movie1:
MyViewHolder vh2 = (MyViewHolder) holder;
Movie1 movie1=(Movie1)moviesList1.get(position);
vh2.title.setText(movie1.getTitle());
vh2.year.setText(movie1.getYear());
vh2.genre.setText(movie1.getGenre());
break;
default:
break;
}
}
@Override
public int getItemCount() {
return moviesList.size();
}
public class ComplexRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
// The items to display in your RecyclerView
private List<Object> items;
private final int MOVIE= 0,THEATERS=1 , BLOCKBUSTER = 2;
// Provide a suitable constructor (depends on the kind of dataset)
public ComplexRecyclerViewAdapter(List<Object> items) {
this.items = items;
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return this.items.size();
}
@Override
public int getItemViewType(int position) {
if (items.get(position) instanceof Movie) {
return MOVIE;
} else if (items.get(position) instanceof Theatrs ) {
return THEATERS;
}else if (items.get(position) instanceof Blockbuster ) {
return BLOCKBUSTER ;
}
return -1;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
RecyclerView.ViewHolder viewHolder;
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
switch (viewType) {
case MOVIE:
View v1 = inflater.inflate(R.layout.movie_viewholder, viewGroup, false);
viewHolder = new ViewHolder1(v1);
break;
case THEATERS:
View v2 = inflater.inflate(R.layout.theater_viewholder2, viewGroup, false);
viewHolder = new ViewHolder2(v2);
break;
case BLOCKBUSTER :
View v3 = inflater.inflate(R.layout.layout_blockbuster, viewGroup, false);
viewHolder = new ViewHolder3(v3);
break;
default:
View v = inflater.inflate(android.R.layout.simple_list_item_1, viewGroup, false);
viewHolder = new RecyclerViewSimpleTextViewHolder(v);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
switch (viewHolder.getItemViewType()) {
case MOVIE:
ViewHolder1 vh1 = (ViewHolder1) viewHolder;
configureViewHolder1(vh1, position);
break;
case THEATERS:
ViewHolder2 vh2 = (ViewHolder2) viewHolder;
configureViewHolder2(vh2, position);
break;
case BLOCKBUSTER :
ViewHolder3 vh3 = (ViewHolder3) viewHolder;
configureViewHolder3(vh3, position);
break;
default:
RecyclerViewSimpleTextViewHolder vh = (RecyclerViewSimpleTextViewHolder) viewHolder;
configureDefaultViewHolder(vh, position);
break;
}
}
}
运行程序之前的最后一个重要更改是将RecycleServiceActivity
中的bindDataToAdapter
方法更改为设置ComplexRecycleServiceAdapter
而不是SimpleItemRecycleServiceAdapter
,如下所示:
private void bindDataToAdapter() {
// Bind adapter to recycler view object
recyclerView.setAdapter(new ComplexRecyclerViewAdapter(getSampleArrayList()));
}
谢谢朋友,什么是CodeMate中的RecycleServiceImpleTextViewHolder?它用于捕获switch语句中的意外值。。你可以忽略它,或者改变它来处理你的默认操作。你可以改变代码以便