package com.gh.gamecenter.adapter; import android.content.Context; import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import com.gh.base.OnRequestCallBackListener; import com.gh.common.util.ImageUtils; import com.gh.common.util.UrlFilterUtils; import com.gh.gamecenter.NewsDetailActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.SuggestionActivity; import com.gh.gamecenter.WebActivity; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; import com.gh.gamecenter.adapter.viewholder.ReuseViewHolder; import com.gh.gamecenter.adapter.viewholder.ToolBoxViewHolder; import com.gh.gamecenter.entity.ToolBoxEntity; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; import com.gh.gamecenter.suggest.SuggestType; import com.lightgame.adapter.BaseRecyclerAdapter; import java.util.ArrayList; import java.util.List; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import retrofit2.HttpException; import static com.gh.common.constant.Config.URL_ARTICLE; import static com.gh.gamecenter.R.string.loading; /** * Created by khy on 24/05/17. */ public class ToolBoxRvAdapter extends BaseRecyclerAdapter { private OnRequestCallBackListener mCallBackListener; private List mEntityList; private String mSearchKey; private boolean mIsSearch; private boolean mIsLoading; private boolean mIsOver; private boolean mIsNetworkError; private int mPage; public ToolBoxRvAdapter(Context context, OnRequestCallBackListener listener, boolean isSearch, String key) { super(context); this.mIsSearch = isSearch; this.mSearchKey = key; mPage = 1; mCallBackListener = listener; mEntityList = new ArrayList<>(); loadData(); } public void loadData() { if (mIsLoading) { return; } mIsLoading = true; RetrofitManager.getInstance(mContext).getApi() .getToolKitData(mPage, UrlFilterUtils.getFilterQuery("keyword", mIsSearch ? mSearchKey : "")) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Response>() { @Override public void onResponse(List response) { super.onResponse(response); if (response.size() > 0) { mEntityList.addAll(response); } mCallBackListener.loadDone(); if (response.size() < 20) { mIsOver = true; } notifyDataSetChanged(); mPage++; mIsLoading = false; if (mEntityList.size() == 0) { mCallBackListener.loadEmpty(); } } @Override public void onFailure(HttpException e) { super.onFailure(e); mIsLoading = false; if (mEntityList.size() == 0) { mCallBackListener.loadError(); } else { mIsNetworkError = true; notifyItemChanged(getItemCount() - 1); } } }); } @Override public int getItemViewType(int position) { if (position == 0) { return 1; } else if (position == getItemCount() - 1) { return 2; } else { return 3; } } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == 2) { View view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false); return new FooterViewHolder(view); } else if (viewType == 1) { View view = mLayoutInflater.inflate(R.layout.toolbox_hint_item, parent, false); return new ReuseViewHolder(view); } else { View view = mLayoutInflater.inflate(R.layout.toolbox_item, parent, false); return new ToolBoxViewHolder(view); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof ToolBoxViewHolder) { ToolBoxViewHolder viewHolder = (ToolBoxViewHolder) holder; ToolBoxEntity toolBoxEntity = mEntityList.get(position - 1); initToolBoxViewHolder(viewHolder, toolBoxEntity); } else if (holder instanceof FooterViewHolder) { FooterViewHolder viewHolder = (FooterViewHolder) holder; initFooterViewHolder(viewHolder); } else if (holder instanceof ReuseViewHolder) { holder.itemView.setOnClickListener(v -> SuggestionActivity.startSuggestionActivity(mContext, SuggestType.normal, null, null)); } } @Override public int getItemCount() { if (mEntityList.size() > 0) { return mEntityList.size() + 2; } else { return 0; } } private void initFooterViewHolder(FooterViewHolder viewHolder) { viewHolder.initItemPadding(); if (mIsNetworkError) { viewHolder.lineLeft.setVisibility(View.GONE); viewHolder.lineRight.setVisibility(View.GONE); viewHolder.loading.setVisibility(View.GONE); viewHolder.hint.setText(R.string.loading_failed_retry); viewHolder.itemView.setClickable(true); viewHolder.itemView.setOnClickListener(v -> loadData()); } else if (mIsOver) { viewHolder.lineLeft.setVisibility(View.VISIBLE); viewHolder.lineRight.setVisibility(View.VISIBLE); viewHolder.loading.setVisibility(View.GONE); viewHolder.hint.setText(R.string.loading_complete); viewHolder.itemView.setClickable(false); } else { viewHolder.lineLeft.setVisibility(View.GONE); viewHolder.lineRight.setVisibility(View.GONE); viewHolder.loading.setVisibility(View.VISIBLE); viewHolder.hint.setText(loading); viewHolder.itemView.setClickable(false); } } private void initToolBoxViewHolder(ToolBoxViewHolder viewHolder, final ToolBoxEntity toolBoxEntity) { viewHolder.mDes.setText(toolBoxEntity.getDes()); viewHolder.mTitle.setText(toolBoxEntity.getName()); ImageUtils.display(viewHolder.mGameThumb, toolBoxEntity.getIcon()); viewHolder.itemView.setOnClickListener(v -> { String url = toolBoxEntity.getUrl(); // http://www.ghzs666.com/article/59291e7ce9a64a496cfd6897.html if (url != null && url.contains(URL_ARTICLE)) { String newsId = url.substring(url.lastIndexOf("/") + 1, url.length() - 5); // 5: ".html" Intent intent = NewsDetailActivity.getIntentById(mContext, newsId, "工具箱列表"); mContext.startActivity(intent); } else { mContext.startActivity(WebActivity.getWebByCollectionTools(mContext, toolBoxEntity, false)); } }); } public boolean isOver() { return mIsOver; } public boolean isLoading() { return mIsLoading; } public boolean isNetworkError() { return mIsNetworkError; } }