有偿请教啊 大佬们帮帮忙 都折腾一个星期了~ ~!
import butterknife.BindView;
public class SearchFragment extends BaseFragment implements ISearchViewCallback,SearchResultAdapter.OnListItmeClick{
private ISearchPresenter mSearchPresenter;
@BindView(R.id.search_history_view)
public TextFlowLayout mHistoriesView;
@BindView(R.id.search_recommend_view)
public TextFlowLayout mRecommendView;
@BindView(R.id.search_recommend_contriner)
public View mRecommendContainer;
@BindView(R.id.search_history_container)
public View mHistoryContainer;
@BindView(R.id.search_btn)//搜索按钮
public TextView mSearchBtn;
@BindView(R.id.secarch_clean_btn)//搜索输入框里的删除按钮
public ImageView mCleanInputBtn;
@BindView(R.id.search_input_box)//搜索输入框
public EditText mSearchInputBox;
@BindView(R.id.search_history_delete)//删除搜索历史按键
public View mHistoryDelete;
//搜索推荐词列表
@BindView(R.id.search_result_list)
public RecyclerView mSearchList;
@BindView(R.id.search_result_container)
public TwinklingRefreshLayout mRefreshContainer;
@BindView(R.id.base_container)
public FrameLayout basecontainer;
private SearchResultAdapter mSearchResultAdapter;
protected void initPresenter(){
mSearchPresenter = PresenterManager.getInstance().getmSearchPresenter();
mSearchPresenter.registerViewCallback(this);
//后去搜索关键词
mSearchPresenter.getRecommendWords();
//mSearchPresenter.doSearch("鞋子");
mSearchPresenter.getHistories();
}
@Override
protected void loadData() {
}
//释放资源
@Override
protected void release() {
if (mSearchPresenter!=null){
mSearchPresenter.unregisterViewCallback(this);
}
}
@Override
protected View loadRootView(LayoutInflater inflater, ViewGroup container) {
return inflater.inflate(R.layout.fragment_search_layout,container,false);
}
@Override
protected int getRootViewResId() {
return R.layout.fragment_search;
}
//点击删除搜索历史jil
public void initListener(){
mSearchResultAdapter.setOnListeItemClick(this);//列表点击事件
//点击搜索 开始动作
mSearchBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String keyword = mSearchInputBox.getText().toString();
mSearchPresenter.doSearch(keyword);
LogUtils.d(this,"点击搜索获取到的数据======>"+keyword);
}
});
/**mSearchInputBox.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
//LogUtils.d(SearchFragment.this,"actionID======>"+actionId);
if (actionId== EditorInfo.IME_ACTION_SEARCH&&mSearchPresenter!=null){
LogUtils.d(SearchFragment.this,"input text =====>"+v.getText());
mKeyword = v.getText().toString();
LogUtils.d(this,"mkeyword======>"+mKeyword);
if (TextUtils.isEmpty(mKeyword)){
ToasUtil.showToast("请输入后搜索");
}else {
}
//判断拿到的内容是否为空
}
return true;
}
});*/
mHistoryDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//TOOD:
mSearchPresenter.delHistories();
LogUtils.d(this,"点击删除"+mHistoryDelete.getMeasuredHeight());
}
});
//下拉去加载更多内容
mRefreshContainer.setOnRefreshListener(new RefreshListenerAdapter() {
@Override
public void onLoadMore(TwinklingRefreshLayout refreshLayout) {
//下拉加载更多
if (mSearchPresenter!=null){
mSearchPresenter.loaderMoer();
}
}
});
}
@Override
protected void initView(View rootView) {
setUpState(State.SUCCESS);
//设置布局管理器
mSearchList.setLayoutManager(new LinearLayoutManager(getContext()));
//设置适配器
mSearchResultAdapter = new SearchResultAdapter();
mSearchList.setAdapter(mSearchResultAdapter);
//设置刷新控件 上拉 下拉
mRefreshContainer.setEnableLoadmore(true);
mRefreshContainer.setEnableRefresh(false);
mRefreshContainer.setEnableOverScroll(true);
}
@Override
public void onHistoriesLoaded(Histories histories) {
setUpState(State.SUCCESS);
LogUtils.d(this,"hitrories"+histories);
if (histories==null||histories.getHistories().size()==0){
mHistoryContainer.setVisibility(View.GONE);
}else {
mHistoryContainer.setVisibility(View.VISIBLE);
mHistoriesView.setTextList(histories.getHistories());
LogUtils.d(this,"histories=====>"+histories);
}
}
@Override
public void onHistoriesDeleted() {
if (mSearchPresenter!=null){
mSearchPresenter.getHistories();
}
}
@Override
public void onSearchSuccess(List<SearchResult.DataBean.TbkDgMaterialOptionalResponseBean.ResultListBean.MapDataBean> result) {
// List<SearchResult.DataBean.TbkDgMaterialOptionalResponseBean.ResultListBean.MapDataBean> map_data = results.getData().getTbk_dg_material_optional_response().getResult_list().getMap_data();
//LogUtils.d(this,"guanjianci "+result);
setUpState(State.SUCCESS);
//隐藏历史记录和推荐 需要时显示
mRecommendContainer.setVisibility(View.GONE);
mHistoryContainer.setVisibility(View.GONE);
//显示搜索界面
mRefreshContainer.setVisibility(View.VISIBLE);
//设置数据
//try {
mSearchResultAdapter.setData(result);
//}catch (Exception e){
//e.printStackTrace();
//如果数据异常 切换到搜索内容为空
// setUpState(State.EMPTY);
// }
// LogUtils.d(this,"搜索列表"+results);
mSearchList.addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.top = 8;
outRect.bottom = 8;
}
});
}
@Override
public void onMoreLoad(List<SearchResult.DataBean.TbkDgMaterialOptionalResponseBean.ResultListBean.MapDataBean> result) {
//List<SearchResult.DataBean.TbkDgMaterialOptionalResponseBean.ResultListBean.MapDataBean> moreData=result
mRefreshContainer.finishLoadmore();
//加载到更多的结果
//拿到结果 添加到适配器
mSearchResultAdapter.addData(result);
//提示加载到更多数据成功
ToasUtil.showToast("加载成功");
}
@Override
public void onMoreLoadedError() {
mRefreshContainer.finishLoadmore();
}
@Override
public void onMoreLoadedEmpty() {
mRefreshContainer.finishLoadmore();
}
//获取的搜索关键词
@Override
public void onRecommendWordsLoaded(SearchRecommend.DataBean recommendWords) {
setUpState(State.SUCCESS);
List<String> recommendKeywords = new ArrayList<>();
recommendKeywords.add(recommendWords.getKeyword());
mHistoriesView.setTextList(recommendKeywords);
LogUtils.d(this,"搜索关键词=========>"+recommendKeywords);
if (recommendWords==null){
mRecommendContainer.setVisibility(View.GONE);
}else {
mRecommendContainer.setVisibility(View.VISIBLE);
mRecommendView.setTextList(recommendKeywords);
}
}
@Override
public void onError() {
}
@Override
public void onLoading() {
}
@Override
public void onEmpty() {
}
/** @Override
public void onItemClice(List<SearchResult.DataBean.TbkDgMaterialOptionalResponseBean.ResultListBean.MapDataBean> item) {
//点击列表内容了 该加载淘口令界面
handleItemClick(item);
LogUtils.d(this,"item click"+item.getTitle());
}*/
private void handleItemClick(SearchResult.DataBean.TbkDgMaterialOptionalResponseBean.ResultListBean.MapDataBean item) {
//处理数据
String title = item.getTitle();
//商品详情的地址
//String url = item.getClickUrl();
String url = item.getCoupon_share_url();//淘口令
if (TextUtils.isEmpty(url)){
url = item.getUrl();
}
String cover = item.getPict_url();
//拿到TiketPresenter去加载数据
ITicketPresenter tickePresenter = PresenterManager.getInstance().getTicketPresenter();
tickePresenter.getTicket(title,url,cover);
startActivity(new Intent(getContext(), TickeActivity.class));
}
@Override
public void onItemClice(SearchResult.DataBean.TbkDgMaterialOptionalResponseBean.ResultListBean.MapDataBean item) {
handleItemClick(item);
}
}
//presenter类
package com.example.taobaounion.presenter.impl;
import com.example.taobaounion.model.Api;
import com.example.taobaounion.model.domain.Histories;
import com.example.taobaounion.model.domain.SearchRecommend;
import com.example.taobaounion.model.domain.SearchResult;
import com.example.taobaounion.presenter.ISearchPresenter;
import com.example.taobaounion.utils.JsonCacheUtil;
import com.example.taobaounion.utils.LogUtils;
import com.example.taobaounion.utils.RetrofitManager;
import com.example.taobaounion.view.ISearchViewCallback;
import java.net.HttpURLConnection;
import java.util.ArrayList;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
public class SearchPresenter implements ISearchPresenter {
private final Api mApi;
private ISearchViewCallback mSearchViewCallback = null;
private String mCurrentKeyword = null;
private final JsonCacheUtil mJsonCacheUtil;
private String s=null;
public SearchPresenter() {
RetrofitManager instance = RetrofitManager.getInstance();
Retrofit retrofit = instance.getmRetrofit();
mApi = retrofit.create(Api.class);
mJsonCacheUtil = JsonCacheUtil.getInstance();
}
public static final int DEFAULT_PAGE = 2;
private int mCurrentpage = DEFAULT_PAGE;
@Override
public void getHistories() {
Histories histories =mJsonCacheUtil.getValue(KEY_HISTORIES,Histories.class);
if (mSearchViewCallback!=null){
mSearchViewCallback.onHistoriesLoaded(histories);
}
}
@Override
public void delHistories() {
mJsonCacheUtil.delCache(KEY_HISTORIES);
if (mSearchViewCallback!=null){
mSearchViewCallback.onHistoriesDeleted();
}
}
public static final String KEY_HISTORIES = "key_histories";
public static final int DEFAULT_HISTORIES_SIZE = 10;
private int mHistoriesMaxSize = DEFAULT_HISTORIES_SIZE;
/**
* 添加历史记录
* @param history
*/
private void SaveHistory(String history){
Histories histories = mJsonCacheUtil.getValue(KEY_HISTORIES, Histories.class);
//如果有记录 就更新记录
List<String>historiesList = null;
if (histories!=null && histories.getHistories()!=null){
historiesList = histories.getHistories();
if (historiesList.contains(history)){
historiesList.remove(history);
}
}
if (historiesList==null){
historiesList = new ArrayList<>();
}
if (histories == null){
histories = new Histories();
}
histories.setHistories(historiesList);
// 对记录个数进行限制
if (historiesList.size()>mHistoriesMaxSize){
historiesList = historiesList.subList(0,mHistoriesMaxSize);
}
//添加记录
historiesList.add(history);
//保存记录
mJsonCacheUtil.saveCache(KEY_HISTORIES,histories);
}
@Override
public void doSearch(String keyword) {
//更新UI状态
s = keyword;
if (mSearchViewCallback != null) {
mSearchViewCallback.onLoading();
}
Call<SearchResult> task = mApi.sea(mCurrentpage, s);
// Call<SearchResult> task = mApi.sea(mCurrentpage,s);
LogUtils.d(SearchPresenter.this,"页码+搜索词是=====》"+mCurrentpage+s);
task.enqueue(new Callback<SearchResult>() {
@Override
public void onResponse(Call<SearchResult> call, Response<SearchResult> response) {
int code = response.code();
LogUtils.d(this,"返回码code=====>"+code);
LogUtils.d(this,"URL==========>"+ response);
if (code == HttpURLConnection.HTTP_OK) {
List<SearchResult.DataBean.TbkDgMaterialOptionalResponseBean.ResultListBean.MapDataBean> mdata = response.body().getData().getTbk_dg_material_optional_response().getResult_list().getMap_data();
mSearchViewCallback.onSearchSuccess(mdata);
LogUtils.d(this,"搜索成功加载回来的结果========》"+mdata);
} else {
onError();
}
}
@Override
public void onFailure(Call<SearchResult> call, Throwable t) {
t.printStackTrace();
onError();
}
});
if (mCurrentKeyword == null || !mCurrentKeyword.endsWith(keyword)) {
this.SaveHistory(keyword);
this.mCurrentKeyword = keyword;
}
}
private void onError() {
if (mSearchViewCallback != null) {
mSearchViewCallback.onError();
}
}
/**private Call<SearchResult> createTask(int page, Object keyword) {
String SearchPagerUrl = UrlUtils.searchPagerUrl(page,keyword);
Retrofit retrofit = RetrofitManager.getInstance().getmRetrofit();
Api api = retrofit.create(Api.class);
return api.sea(SearchPagerUrl);
}*/
/** private void handleSearchResult(SearchResult Result) {
List<SearchResult.DataBean.TbkDgMaterialOptionalResponseBean.ResultListBean.MapDataBean> map_data1 = Result.getData().getTbk_dg_material_optional_response().getResult_list().getMap_data();
if (mSearchViewCallback != null) {
if (isResuliEmpty(map_data1)) {
// mSearchViewCallback.onEmpty();
} else {
mSearchViewCallback.onSearchSuccess(map_data1);
}
}
}*/
private boolean isResuliEmpty(List<SearchResult.DataBean.TbkDgMaterialOptionalResponseBean.ResultListBean.MapDataBean> result) {
try {
return result == null || result.size() == 0;
} catch (Exception e) {
return false;
}
}
/**
* 重新搜索
*/
@Override
public void research() {
if (mCurrentKeyword == null) {
if (mSearchViewCallback != null) {
mSearchViewCallback.onEmpty();
}
} else {
//可以重新搜索
doSearch(s);
}
}
//搜索下拉加载更多
@Override
public void loaderMoer() {
mCurrentpage++;
if (mCurrentKeyword==null){
if (mSearchViewCallback!=null){
mSearchViewCallback.onEmpty();
}
}else {
//做搜索的事情
doSearchMore();
}
}
private void doSearchMore(){
Call<SearchResult> task = mApi.sea(mCurrentpage,s);
task.enqueue(new Callback<SearchResult>() {
@Override
public void onResponse(Call<SearchResult> call, Response<SearchResult> response) {
int code = response.code();
LogUtils.d(this,"code=====>"+code);
if (code == HttpURLConnection.HTTP_OK) {
SearchResult searchResult = response.body();
handleMoreSearchResult(searchResult);
} else {
onLoaderMoreError();
}
}
@Override
public void onFailure(Call<SearchResult> call, Throwable t) {
t.printStackTrace();
onLoaderMoreError();
}
});
}
/**
* 处理搜索加载更多的结果
* @param
*/
private void handleMoreSearchResult(SearchResult searchResult) {
List<SearchResult.DataBean.TbkDgMaterialOptionalResponseBean.ResultListBean.MapDataBean> map_data = searchResult.getData().getTbk_dg_material_optional_response().getResult_list().getMap_data();
if (mSearchViewCallback != null) {
if (isResuliEmpty(map_data)) {
mSearchViewCallback.onMoreLoadedEmpty();
} else {
mSearchViewCallback.onMoreLoad(map_data);
}
}
}
//加载更多搜索内容失败
private void onLoaderMoreError(){
if (mSearchViewCallback!=null){
mSearchViewCallback.onMoreLoadedError();
}
}
//获取搜索关键词
@Override
public void getRecommendWords() {
Call<SearchRecommend> task = mApi.getRecommendWords();
task.enqueue(new Callback<SearchRecommend>() {
@Override
public void onResponse(Call<SearchRecommend> call, Response<SearchRecommend> response) {
int code = response.code();
if (code==HttpURLConnection.HTTP_OK){
//获取成功处理结果
if (mSearchViewCallback!=null){
mSearchViewCallback.onRecommendWordsLoaded(response.body().getData());
LogUtils.d(this,"SearchPresenter推荐搜索词=========>"+response.body().getData().toString());
}
}else {
}
}
@Override
public void onFailure(Call<SearchRecommend> call, Throwable t) {
t.printStackTrace();
}
});
}
@Override
public void registerViewCallback(ISearchViewCallback callback) {
this.mSearchViewCallback=callback;
}
@Override
public void unregisterViewCallback(ISearchViewCallback callback) {
this.mSearchViewCallback=null;
}
}
把这个类SearchResult里面的所有的int类型改成long类型即可。