/* Copyright 2015 shizhefei(LuckyJayce) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package com.shizhefei.test.view.adapters; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; import android.text.format.DateFormat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.shizhefei.mvc.IDataAdapter; import com.shizhefei.mvc.data.Data3; import com.shizhefei.test.models.enties.Discuss; import com.shizhefei.test.models.enties.Movie; import com.shizhefei.view.mvc.demo.R; import java.util.ArrayList; import java.util.List; public class MovieDetailAdapter extends RecyclerView.Adapter<ViewHolder> implements IDataAdapter<Data3<Movie, List<Discuss>, List<Movie>>> { private Data3<Movie, List<Discuss>, List<Movie>> mData = new Data3<Movie, List<Discuss>, List<Movie>>(null, new ArrayList<Discuss>(), new ArrayList<Movie>()); private LayoutInflater inflater; public MovieDetailAdapter(Context context) { super(); this.inflater = LayoutInflater.from(context); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { ViewHolder viewHolder; switch (viewType) { case ITEM_MOVIE: viewHolder = new MovieViewHolder(inflater.inflate(R.layout.item_moviedetail, parent, false)); break; case ITEM_DISCUSS: viewHolder = new DiscussViewHolder(inflater.inflate(R.layout.item_discuss, parent, false)); break; case ITEM_OTHER_MOVIE: default: viewHolder = new OtherViewHolder(inflater.inflate(R.layout.item_othermovie, parent, false)); break; } return viewHolder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { switch (getItemViewType(position)) { case ITEM_MOVIE: onBindMovieViewHolder(holder, position); break; case ITEM_DISCUSS: onBindDiscussViewHolder(holder, position); break; case ITEM_OTHER_MOVIE: onBindOtherMovieViewHolder(holder, position); default: break; } } private void onBindMovieViewHolder(ViewHolder holder, int position) { MovieViewHolder viewHolder = (MovieViewHolder) holder; Movie movie = mData.getValue1(); viewHolder.description.setText(movie.getDescription()); viewHolder.name.setText(movie.getName()); viewHolder.time.setText(movie.getTime()); } private void onBindDiscussViewHolder(ViewHolder holder, int position) { DiscussViewHolder viewHolder = (DiscussViewHolder) holder; Discuss discuss = mData.getValue2().get(position - 1); viewHolder.content.setText(discuss.getContent()); viewHolder.user.setText(discuss.getName()); viewHolder.time.setText(DateFormat.format("MM-dd HH:mm", discuss.getTime())); } private void onBindOtherMovieViewHolder(ViewHolder holder, int position) { OtherViewHolder viewHolder = (OtherViewHolder) holder; Movie movie = mData.getValue3().get(position - 1 - mData.getValue2().size()); viewHolder.description.setText(movie.getDescription()); viewHolder.name.setText(movie.getName()); viewHolder.time.setText(movie.getTime()); } @Override public int getItemViewType(int position) { if (position == 0) { return ITEM_MOVIE; } else if (position < mData.getValue2().size() + 1) { return ITEM_DISCUSS; } return ITEM_OTHER_MOVIE; } private static final int ITEM_MOVIE = 0; private static final int ITEM_DISCUSS = 1; private static final int ITEM_OTHER_MOVIE = 2; @Override public int getItemCount() { return (mData.getValue1()==null?0:1) + mData.getValue2().size() + mData.getValue3().size(); } @Override public void notifyDataChanged(Data3<Movie, List<Discuss>, List<Movie>> data, boolean isRefresh) { if (isRefresh) { mData.setValue1(data.getValue1()); mData.getValue2().clear(); mData.getValue3().clear(); } if (data.getValue2() != null) { mData.getValue2().addAll(data.getValue2()); } if (data.getValue3() != null) { mData.getValue3().addAll(data.getValue3()); } notifyDataSetChanged(); } @Override public Data3<Movie, List<Discuss>, List<Movie>> getData() { return mData; } @Override public boolean isEmpty() { return mData.getValue1() == null; } private static class MovieViewHolder extends ViewHolder { private TextView description; private TextView name; private TextView time; public MovieViewHolder(View itemView) { super(itemView); description = (TextView) itemView.findViewById(R.id.item_moviedetail_description_textView); name = (TextView) itemView.findViewById(R.id.item_moviedetail_name_textView); time = (TextView) itemView.findViewById(R.id.item_moviedetail_time_textView); } } private static class DiscussViewHolder extends ViewHolder { private TextView content; private TextView user; private TextView time; public DiscussViewHolder(View itemView) { super(itemView); content = (TextView) itemView.findViewById(R.id.item_dicuss_content_textView); user = (TextView) itemView.findViewById(R.id.item_dicuss_user_textView); time = (TextView) itemView.findViewById(R.id.item_dicuss_time_textView); } } private static class OtherViewHolder extends ViewHolder { private TextView description; private TextView name; private TextView time; public OtherViewHolder(View itemView) { super(itemView); description = (TextView) itemView.findViewById(R.id.item_otherMovie_description_textView); name = (TextView) itemView.findViewById(R.id.item_otherMovie_name_textView); time = (TextView) itemView.findViewById(R.id.item_otherMovie_time_textView); } } }