修复部分BUG,工具箱增加搜索功能
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user