/* * Copyright (c) 2016 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com> * All Rights Reserved. */ package me.zhanghai.android.douya.profile.ui; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import java.util.List; import me.zhanghai.android.douya.R; import me.zhanghai.android.douya.network.api.info.apiv2.Broadcast; import me.zhanghai.android.douya.network.api.info.apiv2.SimpleUser; import me.zhanghai.android.douya.network.api.info.apiv2.User; import me.zhanghai.android.douya.network.api.info.frodo.Diary; import me.zhanghai.android.douya.network.api.info.frodo.Review; import me.zhanghai.android.douya.network.api.info.frodo.UserItems; import me.zhanghai.android.douya.util.ViewUtils; public class ProfileAdapter extends RecyclerView.Adapter<ProfileAdapter.ViewHolder> { private static final int ITEM_INTRODUCTION = 0; private static final int ITEM_BROADCASTS = 1; private static final int ITEM_FOLLOWSHIP = 2; private static final int ITEM_DIARIES = 3; private static final int ITEM_BOOKS = 4; private static final int ITEM_MOVIES = 5; private static final int ITEM_MUSIC = 6; private static final int ITEM_REVIEWS = 7; private static final int ITEM_COUNT = 8; private ProfileIntroductionLayout.Listener mListener; private Data mData; public ProfileAdapter(ProfileIntroductionLayout.Listener listener) { mListener = listener; setHasStableIds(true); } public void setData(Data data) { mData = data; notifyDataSetChanged(); } @Override public long getItemId(int position) { return position; } @Override public int getItemViewType(int position) { return position; } @Override public int getItemCount() { return mData != null ? ITEM_COUNT : 0; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { int layoutRes; switch (viewType) { case ITEM_INTRODUCTION: layoutRes = R.layout.profile_introduction_item; break; case ITEM_BROADCASTS: layoutRes = R.layout.profile_broadcasts_item; break; case ITEM_FOLLOWSHIP: layoutRes = R.layout.profile_followship_item; break; case ITEM_DIARIES: layoutRes = R.layout.profile_diaries_item; break; case ITEM_BOOKS: layoutRes = R.layout.profile_books_item; break; case ITEM_MOVIES: layoutRes = R.layout.profile_movies_item; break; case ITEM_MUSIC: layoutRes = R.layout.profile_music_item; break; case ITEM_REVIEWS: layoutRes = R.layout.profile_reviews_item; break; default: return null; } return new ViewHolder(ViewUtils.inflate(layoutRes, parent)); } @Override public void onBindViewHolder(ViewHolder holder, int position) { switch (position) { case ITEM_INTRODUCTION: { ProfileIntroductionLayout layout = ((ProfileIntroductionLayout) holder.getChild()); layout.bind(mData.mUser); layout.setListener(mListener); break; } case ITEM_BROADCASTS: ((ProfileBroadcastsLayout) holder.getChild()).bind(mData.mUser, mData.broadcastList); break; case ITEM_FOLLOWSHIP: ((ProfileFollowshipLayout) holder.getChild()).bind(mData.mUser, mData.followingList); break; case ITEM_DIARIES: ((ProfileDiariesLayout) holder.getChild()).bind(mData.mUser, mData.diaryList); break; case ITEM_BOOKS: ((ProfileBooksLayout) holder.getChild()).bind(mData.mUser, mData.userItemList); break; case ITEM_MOVIES: ((ProfileMoviesLayout) holder.getChild()).bind(mData.mUser, mData.userItemList); break; case ITEM_MUSIC: ((ProfileMusicLayout) holder.getChild()).bind(mData.mUser, mData.userItemList); break; case ITEM_REVIEWS: ((ProfileReviewsLayout) holder.getChild()).bind(mData.mUser, mData.reviewList); break; } } public static class Data { public User mUser; public List<Broadcast> broadcastList; public List<SimpleUser> followingList; public List<Diary> diaryList; public List<UserItems> userItemList; public List<Review> reviewList; public Data(User user, List<Broadcast> broadcastList, List<SimpleUser> followingList, List<Diary> diaryList, List<UserItems> userItemList, List<Review> reviewList) { this.mUser = user; this.broadcastList = broadcastList; this.followingList = followingList; this.diaryList = diaryList; this.userItemList = userItemList; this.reviewList = reviewList; } } static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View itemView) { super(itemView); } public View getChild() { return ((ViewGroup) itemView).getChildAt(0); } } }