Files
assistant-android/app/src/main/java/com/gh/gamecenter/adapter/AskSelectGameAdapter.java
2018-02-07 19:29:47 +08:00

213 lines
8.2 KiB
Java

package com.gh.gamecenter.adapter;
import android.content.Context;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.gh.base.OnListClickListener;
import com.gh.common.constant.ItemViewType;
import com.gh.common.util.ImageUtils;
import com.gh.gamecenter.R;
import com.gh.gamecenter.adapter.viewholder.AskSelectGameItemViewHolder;
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder;
import com.gh.gamecenter.ask.entity.AskGameSelectEntity;
import com.gh.gamecenter.ask.entity.CommunitiesGameEntity;
import com.gh.gamecenter.ask.entity.MeEntity;
import com.gh.gamecenter.baselist.ListAdapter;
import com.gh.gamecenter.manager.UserManager;
import java.util.List;
/**
* Created by khy on 6/12/17.
*/
public class AskSelectGameAdapter extends ListAdapter<AskGameSelectEntity> {
private OnListClickListener mListClickListener;
private int mTitlePosition;
private String mCommunityId;
public AskSelectGameAdapter(Context context, OnListClickListener listClickListener) {
super(context);
mListClickListener = listClickListener;
mCommunityId = UserManager.getInstance().getCommunityId(mContext);
}
@Override
protected void provideListData(List<AskGameSelectEntity> listData) {
mEntityList.addAll(listData);
for (int i = 0; i < mEntityList.size(); i++) {
AskGameSelectEntity entity = mEntityList.get(i);
if (TextUtils.isEmpty(entity.getStatus())) {
mEntityList.remove(i);
i--;
}
}
for (int i = 0; i < mEntityList.size(); i++) {
AskGameSelectEntity entity = mEntityList.get(i);
if (i == 0) {
AskGameSelectEntity e = new AskGameSelectEntity();
if ("opened".equals(entity.getStatus())) {
e.setId("已开通");
mEntityList.add(i, e);
i++;
} else {
e.setId("投票中");
mEntityList.add(i, e);
break;
}
} else {
AskGameSelectEntity lastEntity = mEntityList.get(i - 1);
String status = entity.getStatus();
if (!TextUtils.isEmpty(status) && !status.equals(lastEntity.getStatus())) { // 已开通/投票中 断点
mTitlePosition = i - 1;
AskGameSelectEntity e = new AskGameSelectEntity();
e.setId("投票中");
mEntityList.add(i, e);
break;
}
}
}
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if (position == getItemCount() - 1) {
return ItemViewType.ITEM_FOOTER;
}
AskGameSelectEntity entity = mEntityList.get(position);
if ("投票中".equals(entity.getId()) || "已开通".equals(entity.getId())) {
return ItemViewType.ITEM_TOP;
} else {
return ItemViewType.ITEM_BODY;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
switch (viewType) {
case ItemViewType.ITEM_BODY:
view = mLayoutInflater.inflate(R.layout.ask_selectgame_item, parent, false);
return new AskSelectGameItemViewHolder(view, mEntityList, mListClickListener);
case ItemViewType.ITEM_FOOTER:
view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false);
return new FooterViewHolder(view, null, mListClickListener);
case ItemViewType.ITEM_TOP:
view = mLayoutInflater.inflate(R.layout.ask_selectgame_title_item, parent, false);
return new ReuseViewHolder(view, null, mListClickListener);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
AskGameSelectEntity entity;
switch (getItemViewType(position)) {
case ItemViewType.ITEM_BODY:
AskSelectGameItemViewHolder bodyHolder = (AskSelectGameItemViewHolder) holder;
entity = mEntityList.get(position);
CommunitiesGameEntity game = entity.getGame();
ImageUtils.Companion.display(bodyHolder.mIcon, game.getIcon());
if ("opened".equals(entity.getStatus())) {
bodyHolder.mName.setText(entity.getName());
bodyHolder.mVoteRl.setVisibility(View.GONE);
if (mCommunityId.equals(entity.getId())) {
bodyHolder.mSelecthint.setVisibility(View.VISIBLE);
} else {
bodyHolder.mSelecthint.setVisibility(View.GONE);
}
} else {
bodyHolder.mName.setText(game.getName());
bodyHolder.mSelecthint.setVisibility(View.GONE);
bodyHolder.mVoteRl.setVisibility(View.VISIBLE);
bodyHolder.mVotecount.setText(entity.getVote() + "");
MeEntity me = entity.getMe();
if (me != null && me.isCommunityVoted()) {
bodyHolder.mVoteBtn.setBackgroundResource(R.drawable.border_suggest_bg);
bodyHolder.mVoteBtn.setTextColor(ContextCompat.getColor(mContext, R.color.content));
bodyHolder.mVoteBtn.setText(R.string.voted);
} else {
bodyHolder.mVoteBtn.setBackgroundResource(R.drawable.comment_border_bg);
bodyHolder.mVoteBtn.setTextColor(ContextCompat.getColor(mContext, R.color.theme));
bodyHolder.mVoteBtn.setText(R.string.vote);
}
}
break;
case ItemViewType.ITEM_FOOTER:
FooterViewHolder footerViewHolder = (FooterViewHolder) holder;
footerViewHolder.lineLeft.setVisibility(View.GONE);
footerViewHolder.lineRight.setVisibility(View.GONE);
if (mIsNetworkError) {
footerViewHolder.loading.setVisibility(View.GONE);
footerViewHolder.hint.setText(R.string.loading_failed_retry);
} else if (mIsOver) {
footerViewHolder.loading.setVisibility(View.GONE);
footerViewHolder.hint.setText(R.string.ask_game_suggestion);
} else {
footerViewHolder.loading.setVisibility(View.VISIBLE);
footerViewHolder.hint.setText(R.string.loading);
}
break;
case ItemViewType.ITEM_TOP:
entity = mEntityList.get(position);
ReuseViewHolder topHolder = (ReuseViewHolder) holder;
if (topHolder.itemView instanceof TextView) {
((TextView) topHolder.itemView).setText(entity.getId());
}
break;
}
}
@Override
public int getItemCount() {
return mEntityList == null || mEntityList.isEmpty() ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT;
}
public int getTitlePosition() {
return mTitlePosition;
}
public boolean isOver() {
return mIsOver;
}
public void resetCommunityId(String id) {
mCommunityId = id;
notifyDataSetChanged();
}
public void voteSuccess(String communityId) {
for (AskGameSelectEntity entity : mEntityList) {
if (communityId.equals(entity.getId())) {
MeEntity me = entity.getMe();
if (me == null) me = new MeEntity();
me.setCommunityVoted(true);
entity.setMe(me);
entity.setVote(entity.getVote() + 1);
notifyDataSetChanged();
break;
}
}
}
public void postCommunitiesSuccess(AskGameSelectEntity entity) {
mEntityList.add(entity);
notifyDataSetChanged();
}
}