修复部分BUG,工具箱增加搜索功能

This commit is contained in:
kehaoyuan
2017-05-31 20:39:18 +08:00
parent e3d9fac1b0
commit d7e113108b
28 changed files with 343 additions and 187 deletions

View File

@ -3,16 +3,22 @@ package com.gh.gamecenter.adapter;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import com.gh.base.AppController;
import com.gh.common.constant.ItemViewType;
import com.gh.common.util.EntranceUtils;
import com.gh.common.util.ImageUtils;
import com.gh.common.util.Utils;
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.LibaoSearchViewHolder;
import com.gh.gamecenter.adapter.viewholder.ToolBoxViewHolder;
import com.gh.gamecenter.entity.ToolBoxEntity;
import com.gh.gamecenter.listener.OnCallBackListener;
@ -23,9 +29,12 @@ import java.util.ArrayList;
import java.util.List;
import retrofit2.HttpException;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import static com.gh.gamecenter.R.string.loading;
/**
* Created by khy on 24/05/17.
*/
@ -33,25 +42,40 @@ import rx.schedulers.Schedulers;
public class ToolBoxRvAdapter extends BaseRecyclerAdapter {
private OnCallBackListener mCallBackListener;
private OnSearchCallBackListener mSearchListener;
private List<ToolBoxEntity> mEntityList;
private String mSerchKey;
private boolean mIsSearch;
private boolean mIsLoading;
private boolean mIsOver;
private boolean mIsNetworkError;
public ToolBoxRvAdapter(Context context, OnCallBackListener listener) {
public ToolBoxRvAdapter(Context context, OnCallBackListener listener, OnSearchCallBackListener searchListener,
boolean isSearch, String key) {
super(context);
this.mIsSearch = isSearch;
this.mSerchKey = key;
mSearchListener = searchListener;
mCallBackListener = listener;
mEntityList = new ArrayList<>();
loadData(0);
loadData(isSearch, 0);
}
public void loadData(int offset) {
RetrofitManager
.getApi()
.getToolBoxData(offset, "")
public void loadData(boolean isSearch, int offset) {
mIsLoading = true;
Observable<List<ToolBoxEntity>> api;
if (isSearch) {
api = RetrofitManager.getApi().getToolBoxDataSearch(offset, mSerchKey);
} else {
api = RetrofitManager.getApi().getToolBoxData(offset);
}
api
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Response<List<ToolBoxEntity>>(){
@ -68,6 +92,7 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter {
notifyDataSetChanged();
}
mIsLoading = false;
if (mEntityList.size() == 0) {
mCallBackListener.loadEmpty();
@ -77,6 +102,7 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter {
@Override
public void onFailure(HttpException e) {
super.onFailure(e);
mIsLoading = false;
if (mEntityList.size() == 0) {
mCallBackListener.loadError();
} else {
@ -89,16 +115,21 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter {
@Override
public int getItemViewType(int position) {
if (position == getItemCount() - 1) {
if (position == 0 ) {
return 0;
} else {
} else if (position == getItemCount() - 1) {
return 1;
} else {
return 2;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == 0) {
View view = mLayoutInflater.inflate(R.layout.libao_item_search, parent, false);
return new LibaoSearchViewHolder(view);
} else if (viewType == 1) {
View view = LayoutInflater.from(mContext).inflate(R.layout.refresh_footerview, parent, false);
return new FooterViewHolder(view);
} else {
@ -112,25 +143,105 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter {
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ToolBoxViewHolder) {
ToolBoxViewHolder viewHolder = (ToolBoxViewHolder) holder;
ToolBoxEntity toolBoxEntity = mEntityList.get(position);
ToolBoxEntity toolBoxEntity = mEntityList.get(position - 1);
initToolBoxViewHolder(viewHolder, toolBoxEntity);
} else if (holder instanceof FooterViewHolder) {
FooterViewHolder viewHolder = (FooterViewHolder) holder;
viewHolder.initItemPadding();
viewHolder.initFooterViewHolder(mIsNetworkError, mIsOver
, new View.OnClickListener() {
@Override
public void onClick(View v) {
mIsNetworkError = false;
loadData(mEntityList.size());
}
});
initFooterViewHolder(viewHolder);
} else if (holder instanceof LibaoSearchViewHolder) {
LibaoSearchViewHolder viewHolder = (LibaoSearchViewHolder) holder;
initSearchViewHolder(viewHolder);
}
}
@Override
public int getItemCount() {
return mEntityList.size();
if (mEntityList.size() > 0) {
return mEntityList.size() + 2;
} else {
return 1;
}
}
private void initSearchViewHolder(final LibaoSearchViewHolder viewHolder) {
if (mSerchKey != null) {
viewHolder.searchEt.setText(mSerchKey);
}
if (mIsSearch) {
viewHolder.backTv.setVisibility(View.VISIBLE);
} else {
viewHolder.backTv.setVisibility(View.GONE);
}
viewHolder.backTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSearchListener.search(false, viewHolder.searchEt.getText().toString());
}
});
viewHolder.searchTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(viewHolder.searchEt.getText().toString())) {
Utils.toast(mContext, "请输入关键字");
return;
}
mSearchListener.search(true, viewHolder.searchEt.getText().toString());
}
});
viewHolder.searchEt.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(viewHolder.searchEt.getWindowToken(), 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("加载失败,点击重试");
viewHolder.itemView.setClickable(true);
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loadData(false, mEntityList.size());
}
});
} else if (mIsOver) {
viewHolder.lineLeft.setVisibility(View.VISIBLE);
viewHolder.lineRight.setVisibility(View.VISIBLE);
viewHolder.loading.setVisibility(View.GONE);
viewHolder.hint.setText("需要什么工具,点击这里反馈");
viewHolder.itemView.setClickable(true);
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SuggestionActivity.startSuggestionActivity(mContext, 2, null, null);
}
});
} 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) {
@ -141,15 +252,30 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter {
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AppController.put("ToolBoxEntity", toolBoxEntity);
Intent intent = new Intent(mContext, WebActivity.class);
intent.putExtra("url", toolBoxEntity.getUrl());
intent.putExtra("isTools", true);
mContext.startActivity(intent);
String url = toolBoxEntity.getUrl();
// http://www.ghzhushou.com/article/59291e7ce9a64a496cfd6897.html
if (url.contains("http://www.ghzhushou.com/article/")) {
String newsId = url.substring(url.lastIndexOf("/") + 1, url.length() - 5);
Utils.log("=========" + newsId);
Intent intent = new Intent(mContext, NewsDetailActivity.class);
intent.putExtra("newsId", newsId);
intent.putExtra(EntranceUtils.KEY_ENTRANCE, "工具箱列表");
mContext.startActivity(intent);
} else {
AppController.put("ToolBoxEntity", toolBoxEntity);
Intent intent = new Intent(mContext, WebActivity.class);
intent.putExtra("url", toolBoxEntity.getUrl());
intent.putExtra("isTools", true);
mContext.startActivity(intent);
}
}
});
}
public int dataSize() {
return mEntityList.size();
}
public boolean isOver() {
return mIsOver;
}
@ -161,4 +287,8 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter {
public boolean isNetworkError() {
return mIsNetworkError;
}
public interface OnSearchCallBackListener {
void search(boolean isSearch, String searchKey);
}
}