package com.dreamspace.uucampus.ui.activity.Search;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import com.dreamspace.uucampus.R;
import com.dreamspace.uucampus.adapter.search.SearchGoodsAdapter;
import com.dreamspace.uucampus.adapter.search.SearchHistoryAdapter;
import com.dreamspace.uucampus.adapter.search.SearchIdleAdapter;
import com.dreamspace.uucampus.adapter.search.SearchShopAdapter;
import com.dreamspace.uucampus.api.ApiManager;
import com.dreamspace.uucampus.common.SharePreference;
import com.dreamspace.uucampus.common.utils.CommonUtils;
import com.dreamspace.uucampus.common.utils.NetUtils;
import com.dreamspace.uucampus.model.GoodsItem;
import com.dreamspace.uucampus.model.IdleItem;
import com.dreamspace.uucampus.model.ShopItem;
import com.dreamspace.uucampus.model.api.SearchGoodsRes;
import com.dreamspace.uucampus.model.api.SearchIdleRes;
import com.dreamspace.uucampus.model.api.SearchShopRes;
import com.dreamspace.uucampus.ui.activity.FreeGoods.FreeGoodsDetailActivity;
import com.dreamspace.uucampus.ui.activity.Market.GoodDetailAct;
import com.dreamspace.uucampus.ui.activity.Market.ShopShowGoodsAct;
import com.dreamspace.uucampus.ui.base.AbsActivity;
import com.dreamspace.uucampus.ui.dialog.ProgressDialog;
import java.util.ArrayList;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
/**
* Created by money on 2015/11/11.
*/
public class SearchResultActivity extends AbsActivity {
@Bind(R.id.search_text)
EditText searchText;
@Bind(R.id.search_img)
ImageView searchImg;
@Bind(R.id.search_goods_list)
ListView searchGoodsList;
@Bind(R.id.search_goods_more)
LinearLayout searchGoodsMore;
@Bind(R.id.search_goods_linear)
LinearLayout searchGoodsLinear;
@Bind(R.id.search_idle_more)
LinearLayout searchIdleMore;
@Bind(R.id.search_idle_linear)
LinearLayout searchIdleLinear;
@Bind(R.id.search_shop_more)
LinearLayout searchShopMore;
@Bind(R.id.search_shop_linear)
LinearLayout searchShopLinear;
@Bind(R.id.search_failed_linear)
LinearLayout searchFailedLinear;
@Bind(R.id.search_idle_list)
ListView searchIdleList;
@Bind(R.id.search_shop_list)
ListView searchShopList;
@Bind(R.id.search_history_list)
ListView searchHistoryList;
@Bind(R.id.search_history_delete_linear)
LinearLayout searchHistoryDeleteLinear;
@Bind(R.id.search_history_linear)
LinearLayout searchHistoryLinear;
@Bind(R.id.search_history_divider)
View searchHistoryDivider;
@Bind(R.id.search_goods_divider)
View searchGoodsDivider;
@Bind(R.id.search_idle_divider)
View searchIdleDivider;
@Bind(R.id.search_shop_divider)
View searchShopDivider;
private ProgressDialog pd;
private boolean haveResult;
private SearchHistoryAdapter searchHistoryAdapter;
private SearchGoodsAdapter searchGoodsAdapter;
private SearchIdleAdapter searchIdleAdapter;
private SearchShopAdapter searchShopAdapter;
private String keyWord;
//保存搜索结果
private List<GoodsItem> goodsItems;
private List<IdleItem> idleItems;
private List<ShopItem> shopItems;
@Override
protected int getContentView() {
return R.layout.activity_search_result;
}
@Override
protected void prepareDatas() {
ButterKnife.bind(this);
pd = new ProgressDialog(this);
goodsItems = new ArrayList<>();
idleItems = new ArrayList<>();
shopItems = new ArrayList<>();
}
@Override
protected void initViews() {
searchHistoryLinear.setVisibility(View.GONE);
searchGoodsLinear.setVisibility(View.GONE);
searchIdleLinear.setVisibility(View.GONE);
searchShopLinear.setVisibility(View.GONE);
searchFailedLinear.setVisibility(View.GONE);
initListeners();
}
@Override
protected View getLoadingTargetView() {
return null;
}
private void initListeners() {
searchText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//点击后显示历史记录,如果没有历史记录则不显示
//隐藏其他列表
if (SharePreference.searchHistory.size() != 0) {
searchHistoryDeleteLinear.setVisibility(View.VISIBLE);
searchHistoryDivider.setVisibility(View.VISIBLE);
searchHistory();
}
}
});
searchHistoryDeleteLinear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//点击后清除历史记录
SharePreference.searchHistory = new ArrayList<String>();
searchHistory();
searchHistoryDeleteLinear.setVisibility(View.GONE);
searchHistoryDivider.setVisibility(View.GONE);
}
});
searchImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pd.show();
//判断是否有匹配结果
haveResult = false;
keyWord = searchText.getText().toString();
searchFailedLinear.setVisibility(View.GONE);
searchGoods();
}
});
searchGoodsMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bundle bundle = new Bundle();
bundle.putInt("category", 0);
bundle.putString("key", keyWord);
readyGo(SearchResultMoreActivity.class, bundle);
}
});
searchIdleMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bundle bundle = new Bundle();
bundle.putInt("category", 1);
bundle.putString("key", keyWord);
readyGo(SearchResultMoreActivity.class, bundle);
}
});
searchShopMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bundle bundle = new Bundle();
bundle.putInt("category", 2);
bundle.putString("key", keyWord);
readyGo(SearchResultMoreActivity.class, bundle);
}
});
searchGoodsList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if (searchGoodsAdapter != null) {
Bundle bundle = new Bundle();
bundle.putString(GoodDetailAct.GOOD_ID, searchGoodsAdapter.getItem(i).getGoods_id());
readyGo(GoodDetailAct.class, bundle);
}
}
});
searchShopList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if (searchShopAdapter != null) {
Bundle bundle = new Bundle();
bundle.putString(ShopShowGoodsAct.SHOP_ID, searchShopAdapter.getItem(i).getShop_id());
bundle.putString(ShopShowGoodsAct.SHOP_NAME, searchShopAdapter.getItem(i).getName());
readyGo(ShopShowGoodsAct.class, bundle);
}
}
});
searchIdleList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if (searchIdleAdapter != null) {
Bundle bundle = new Bundle();
bundle.putString(FreeGoodsDetailActivity.EXTRA_IDLE_ID, searchIdleAdapter.getItem(i).getIdle_id());
readyGo(FreeGoodsDetailActivity.class, bundle);
}
}
});
searchHistoryList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if (searchHistoryAdapter != null) {
String temp = searchHistoryAdapter.getItem(i);
searchText.setText(temp);
keyWord = temp;
pd.show();
searchFailedLinear.setVisibility(View.GONE);
searchGoods();
}
}
});
}
//显示历史记录
private void searchHistory() {
searchHistoryLinear.setVisibility(View.VISIBLE);
searchHistoryDivider.setVisibility(View.VISIBLE);
searchGoodsLinear.setVisibility(View.GONE);
searchIdleLinear.setVisibility(View.GONE);
searchShopLinear.setVisibility(View.GONE);
searchFailedLinear.setVisibility(View.GONE);
//只显示十条历史记录
List<String> histories = new ArrayList<>();
List<String> temp = SharePreference.searchHistory;
int n = temp.size();
if (n > 10) {
for (int i = 0; i < 10; i++) {
histories.add(temp.get(n - i - 1));
}
} else {
for (int i = 0; i < n; i++) {
histories.add(temp.get(n - i - 1));
}
}
searchHistoryAdapter = new SearchHistoryAdapter(getApplicationContext(), histories, SearchHistoryAdapter.ViewHolder.class);
searchHistoryList.setAdapter(searchHistoryAdapter);
}
//搜索商品
private void searchGoods() {
if (!CommonUtils.isEmpty(keyWord)) {
if (NetUtils.isNetworkConnected(this)) {
ApiManager.getService(this).searchGoods(keyWord, null, null, null, null, null, 1, "东南大学九龙湖校区", new Callback<SearchGoodsRes>() {
@Override
public void success(SearchGoodsRes searchGoodsRes, Response response) {
//历史记录隐藏,搜索关键词加入历史记录
searchHistoryLinear.setVisibility(View.GONE);
SharePreference.searchHistory.add(keyWord);
goodsItems = searchGoodsRes.getResult();
searchGoodsLinear.setVisibility(View.GONE);
int size = goodsItems.size();
if (size != 0) {
searchGoodsLinear.setVisibility(View.VISIBLE);
searchGoodsDivider.setVisibility(View.GONE);
searchGoodsMore.setVisibility(View.GONE);
haveResult = true;
}
List<GoodsItem> temp = new ArrayList<GoodsItem>();
if (size > 2) {
temp.add(goodsItems.get(0));
temp.add(goodsItems.get(1));
searchGoodsDivider.setVisibility(View.VISIBLE);
searchGoodsMore.setVisibility(View.VISIBLE);
} else {
temp = goodsItems;
}
searchGoodsAdapter = new SearchGoodsAdapter(getApplicationContext(), temp, SearchGoodsAdapter.ViewHolder.class);
searchGoodsList.setAdapter(searchGoodsAdapter);
fixListViewHeight(searchGoodsList);
searchIdle();
}
@Override
public void failure(RetrofitError error) {
showInnerError(error);
pd.dismiss();
}
});
} else {
showNetWorkError();
pd.dismiss();
}
} else {
showToast("搜索关键字不能为空");
pd.dismiss();
}
}
//搜索闲置
private void searchIdle() {
ApiManager.getService(this).searchIdle(keyWord, null, null, 1, "东南大学九龙湖校区", new Callback<SearchIdleRes>() {
@Override
public void success(SearchIdleRes searchIdleRes, Response response) {
idleItems = searchIdleRes.getResult();
searchIdleLinear.setVisibility(View.GONE);
int size = idleItems.size();
if (size != 0) {
searchIdleLinear.setVisibility(View.VISIBLE);
searchIdleDivider.setVisibility(View.GONE);
searchIdleMore.setVisibility(View.GONE);
haveResult = true;
}
List<IdleItem> temp = new ArrayList<IdleItem>();
if (size > 2) {
temp.add(idleItems.get(0));
temp.add(idleItems.get(1));
searchIdleDivider.setVisibility(View.VISIBLE);
searchIdleMore.setVisibility(View.VISIBLE);
} else {
temp = idleItems;
}
searchIdleAdapter = new SearchIdleAdapter(getApplicationContext(), temp, SearchIdleAdapter.ViewHolder.class);
searchIdleList.setAdapter(searchIdleAdapter);
fixListViewHeight(searchIdleList);
searchShop();
}
@Override
public void failure(RetrofitError error) {
showInnerError(error);
pd.dismiss();
}
});
}
//搜索店铺
private void searchShop() {
ApiManager.getService(this).searchShop(keyWord, null, null, 1, "东南大学九龙湖校区", new Callback<SearchShopRes>() {
@Override
public void success(SearchShopRes searchShopRes, Response response) {
shopItems = searchShopRes.getResult();
searchShopLinear.setVisibility(View.GONE);
int size = shopItems.size();
if (size != 0) {
searchShopLinear.setVisibility(View.VISIBLE);
searchShopDivider.setVisibility(View.GONE);
searchShopMore.setVisibility(View.GONE);
haveResult = true;
}
List<ShopItem> temp = new ArrayList<ShopItem>();
if (size > 2) {
temp.add(shopItems.get(0));
temp.add(shopItems.get(1));
searchShopDivider.setVisibility(View.VISIBLE);
searchShopMore.setVisibility(View.VISIBLE);
} else {
temp = shopItems;
}
searchShopAdapter = new SearchShopAdapter(getApplicationContext(), temp, SearchShopAdapter.ViewHolder.class);
searchShopList.setAdapter(searchShopAdapter);
fixListViewHeight(searchShopList);
pd.dismiss();
//显示没有搜索结果的界面
if (!haveResult) {
searchFailedLinear.setVisibility(View.VISIBLE);
}
}
@Override
public void failure(RetrofitError error) {
showInnerError(error);
pd.dismiss();
}
});
}
//ScrollVIew嵌套ListView时,会无法正确的计算ListView的大小
//需要手动计算列表的高度
private void fixListViewHeight(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
int totalHeight = 0;
if (listAdapter == null) {
return;
}
for (int i = 0, len = listAdapter.getCount(); i < len; i++) {
View listViewItem = listAdapter.getView(i, null, listView);
//计算子项View的宽高
listViewItem.measure(0, 0);
totalHeight += listViewItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
// listView.getDividerHeight()获取子项间分隔符的高度
// params.height设置ListView完全显示需要的高度
params.height = totalHeight;
listView.setLayoutParams(params);
}
}