266 lines
9.3 KiB
Java
266 lines
9.3 KiB
Java
package com.gh.gamecenter.adapter;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.drawable.ColorDrawable;
|
|
import android.support.v4.content.ContextCompat;
|
|
import android.support.v7.widget.RecyclerView;
|
|
import android.support.v7.widget.RecyclerView.ViewHolder;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
|
|
import com.gh.base.adapter.BaseRecyclerAdapter;
|
|
import com.gh.common.util.DisplayUtils;
|
|
import com.gh.gamecenter.R;
|
|
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
|
|
import com.gh.gamecenter.adapter.viewholder.VoteViewHolder;
|
|
import com.gh.gamecenter.db.VersionVoteDao;
|
|
import com.gh.gamecenter.entity.VersionVoteEntity;
|
|
import com.gh.base.OnRequestCallBackListener;
|
|
import com.gh.gamecenter.retrofit.Response;
|
|
import com.gh.gamecenter.retrofit.RetrofitManager;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import retrofit2.HttpException;
|
|
import rx.android.schedulers.AndroidSchedulers;
|
|
import rx.schedulers.Schedulers;
|
|
|
|
/**
|
|
* Created by khy on 2017/4/11.
|
|
* 求版本投票页面适配器
|
|
*/
|
|
public class VoteAdapter extends BaseRecyclerAdapter<ViewHolder> {
|
|
|
|
private OnRequestCallBackListener mCallBackListener;
|
|
|
|
private OnAddVoteListener mAddVoteListener;
|
|
|
|
private float mPbwidth; //进度条原始最大宽度
|
|
|
|
private List<VersionVoteEntity> mVoteList;
|
|
|
|
private VersionVoteDao mVoteDao;
|
|
|
|
private boolean isRemove;
|
|
private boolean isNetworkError;
|
|
private boolean isLoaded;
|
|
|
|
private String mGameId;
|
|
|
|
public VoteAdapter(Context context, OnRequestCallBackListener onRequestCallBackListener
|
|
, OnAddVoteListener addVoteListener, String gameId, VersionVoteDao voteDao) {
|
|
super(context);
|
|
|
|
this.mCallBackListener = onRequestCallBackListener;
|
|
this.mAddVoteListener = addVoteListener;
|
|
this.mGameId = gameId;
|
|
|
|
mPbwidth = (float) (mContext.getResources().getDisplayMetrics().widthPixels * 0.65);
|
|
|
|
mVoteList = new ArrayList<>();
|
|
mVoteDao = voteDao;
|
|
|
|
getVersionVote(0);
|
|
}
|
|
|
|
public void getVersionVote(final int offset) {
|
|
RetrofitManager
|
|
.getApi()
|
|
.getVersionVote(mGameId, offset, 20)
|
|
.subscribeOn(Schedulers.io())
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
.subscribe(new Response<List<VersionVoteEntity>>() {
|
|
@Override
|
|
public void onResponse(List<VersionVoteEntity> response) {
|
|
super.onResponse(response);
|
|
if (response.size() > 0) {
|
|
if (response.size() < 20) {
|
|
isRemove = true;
|
|
}
|
|
|
|
if (offset == 0) {
|
|
mCallBackListener.loadDone();
|
|
}
|
|
|
|
mVoteList.addAll(response);
|
|
|
|
notifyItemRangeInserted(mVoteList.size() - response.size(), response.size());
|
|
} else {
|
|
isRemove = true;
|
|
if (mVoteList.size() == 0) {
|
|
mCallBackListener.loadEmpty();
|
|
}
|
|
}
|
|
|
|
isLoaded = true;
|
|
}
|
|
|
|
@Override
|
|
public void onFailure(HttpException e) {
|
|
super.onFailure(e);
|
|
isLoaded = true;
|
|
if (offset == 0) {
|
|
mCallBackListener.loadError();
|
|
} else {
|
|
isNetworkError = true;
|
|
notifyItemChanged(getItemCount() - 1);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
|
if (viewType == 0) {
|
|
View view = LayoutInflater.from(mContext).inflate(R.layout.refresh_footerview, parent, false);
|
|
return new FooterViewHolder(view);
|
|
} else {
|
|
View view = LayoutInflater.from(mContext).inflate(R.layout.vote_item, parent, false);
|
|
return new VoteViewHolder(view);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
|
if (holder instanceof VoteViewHolder) {
|
|
final VoteViewHolder viewHolder = (VoteViewHolder) holder;
|
|
|
|
viewHolder.voteBtn.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
|
|
}
|
|
});
|
|
|
|
VersionVoteEntity versionVoteEntity = mVoteList.get(position);
|
|
|
|
if (mVoteDao.isVote(versionVoteEntity.getId())) {
|
|
viewHolder.voteBtn.setBackgroundResource(R.drawable.border_suggest_bg);
|
|
viewHolder.voteBtn.setTextColor(ContextCompat.getColor(mContext, R.color.content));
|
|
viewHolder.voteBtn.setText("已投");
|
|
viewHolder.voteBtn.setEnabled(false);
|
|
} else {
|
|
viewHolder.voteBtn.setBackgroundResource(R.drawable.comment_border_bg);
|
|
viewHolder.voteBtn.setTextColor(ContextCompat.getColor(mContext, R.color.theme));
|
|
viewHolder.voteBtn.setText("投票");
|
|
viewHolder.voteBtn.setEnabled(true);
|
|
}
|
|
|
|
View progressbar = viewHolder.progressbar;
|
|
ViewGroup.LayoutParams layoutParams = progressbar.getLayoutParams();
|
|
if (position > 0) {
|
|
float maxSize = (float) mVoteList.get(0).getNum();
|
|
|
|
float curSize = (float) versionVoteEntity.getNum();
|
|
|
|
float f = curSize / maxSize;
|
|
layoutParams.width = (int) (mPbwidth * f);
|
|
|
|
} else {
|
|
layoutParams.width = (int) mPbwidth;
|
|
}
|
|
|
|
viewHolder.name.setText(versionVoteEntity.getName());
|
|
viewHolder.count.setText(versionVoteEntity.getNum() + "票");
|
|
progressbar.setLayoutParams(layoutParams);
|
|
|
|
viewHolder.voteBtn.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
mCallBackListener.loadDone(viewHolder.name.getText().toString());
|
|
}
|
|
});
|
|
} else if (holder instanceof FooterViewHolder) {
|
|
initFooterViewHolder((FooterViewHolder) holder);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getItemViewType(int position) {
|
|
if (position == getItemCount() - 1) {
|
|
return 0;
|
|
} else {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getItemCount() {
|
|
if (mVoteList.size() == 0) {
|
|
return 0;
|
|
}
|
|
|
|
return mVoteList.size() + 1;
|
|
}
|
|
|
|
private void initFooterViewHolder(final FooterViewHolder viewHolder) {
|
|
if (isNetworkError) {
|
|
viewHolder.loading.setVisibility(View.GONE);
|
|
viewHolder.hint.setText("加载失败,点击重试");
|
|
viewHolder.hint.setBackgroundDrawable(new ColorDrawable(0));
|
|
viewHolder.itemView.setClickable(true);
|
|
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
isNetworkError = false;
|
|
notifyItemChanged(getItemCount() - 1);
|
|
getVersionVote(mVoteList.size());
|
|
}
|
|
});
|
|
} else if (isRemove) {
|
|
viewHolder.loading.setVisibility(View.GONE);
|
|
viewHolder.hint.setText("添加选项");
|
|
int dp = DisplayUtils.dip2px(mContext, 7);
|
|
viewHolder.hint.setPadding(2 * dp, dp, 2 * dp, dp);
|
|
viewHolder.hint.setBackgroundResource(R.drawable.border_suggest_bg);
|
|
viewHolder.itemView.setClickable(false);
|
|
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
mAddVoteListener.addVote();
|
|
}
|
|
});
|
|
} else {
|
|
viewHolder.loading.setVisibility(View.VISIBLE);
|
|
viewHolder.hint.setText(R.string.loading);
|
|
viewHolder.hint.setBackgroundDrawable(new ColorDrawable(0));
|
|
viewHolder.itemView.setClickable(false);
|
|
}
|
|
}
|
|
|
|
public void voteCallBack(boolean cast, boolean isNewVote, String id, String name) {
|
|
if (cast) {
|
|
if (isNewVote) {
|
|
VersionVoteEntity voteEntity = new VersionVoteEntity();
|
|
voteEntity.setId(id);
|
|
voteEntity.setName(name);
|
|
voteEntity.setNum(1);
|
|
mVoteList.add(voteEntity);
|
|
mCallBackListener.loadDone();
|
|
} else {
|
|
for (VersionVoteEntity versionVoteEntity : mVoteList) {
|
|
if ((id).equals(versionVoteEntity.getId())) {
|
|
versionVoteEntity.setNum(versionVoteEntity.getNum() + 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
notifyDataSetChanged();
|
|
}
|
|
|
|
|
|
public boolean isLoaded() {
|
|
return isLoaded;
|
|
}
|
|
|
|
public boolean isRemove() {
|
|
return isRemove;
|
|
}
|
|
|
|
public interface OnAddVoteListener {
|
|
void addVote();
|
|
}
|
|
}
|