Files
assistant-android/app/src/main/java/com/gh/gamecenter/adapter/VoteAdapter.java
CsHeng b3d63c5698 1、处理viewholder
2、处理adapter
3、
2017-06-16 15:39:45 +08:00

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();
}
}