package com.haicaojie.android.ui.recommend;
|
|
import android.content.Intent;
|
import android.graphics.drawable.Drawable;
|
import android.os.Build;
|
import android.os.Bundle;
|
import android.provider.Settings;
|
import android.text.Editable;
|
import android.text.TextUtils;
|
import android.text.TextWatcher;
|
import android.view.Gravity;
|
import android.view.KeyEvent;
|
import android.view.MotionEvent;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.view.Window;
|
import android.view.WindowManager;
|
import android.view.inputmethod.EditorInfo;
|
import android.widget.AdapterView;
|
import android.widget.ArrayAdapter;
|
import android.widget.AutoCompleteTextView;
|
import android.widget.BaseAdapter;
|
import android.widget.FrameLayout;
|
import android.widget.LinearLayout;
|
import android.widget.ScrollView;
|
import android.widget.TextView;
|
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.google.gson.reflect.TypeToken;
|
import com.haicaojie.android.BasicTextHttpResponseHandler;
|
import com.haicaojie.android.R;
|
import com.haicaojie.android.ShoppingApi;
|
import com.haicaojie.android.entity.HotSearch;
|
import com.haicaojie.android.ui.BaseActivity;
|
import com.haicaojie.android.util.FlowLayout;
|
import com.lcjian.library.content.ConnectivityChangeHelper;
|
import com.lcjian.library.util.NetUtils;
|
import com.lcjian.library.util.SingleToast;
|
import com.lcjian.library.util.common.DimenUtils;
|
import com.lcjian.library.util.common.StringUtils;
|
import com.lcjian.library.widget.MyListView;
|
import com.umeng.analytics.MobclickAgent;
|
|
import org.apache.http.Header;
|
import org.json.JSONArray;
|
import org.json.JSONObject;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Random;
|
|
/**
|
* Created by weikou2015 on 2017/2/21.
|
* 搜索
|
*/
|
|
public class SearchActivity extends BaseActivity implements View.OnClickListener {
|
FlowLayout fl_hot_search;
|
HistoryAdapter adapter;
|
MyListView lv_history;
|
private AutoCompleteTextView et_search;
|
private TextView tv_back;
|
private TextView tv_search;
|
private TextView tv_clear_history;
|
public static SearchActivity instance = null;
|
private ConnectivityChangeHelper mChangeHelper;
|
private LinearLayout ll_no_net, ll_no_data, ll_request_failture;
|
private ScrollView sv_search;
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
setContentView(R.layout.activity_search);
|
instance = this;
|
/*
|
* 计算状态栏高度并设置
|
*/
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
Window window = getWindow();
|
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
|
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
|
int result = 0;
|
int resourceId = getResources().getIdentifier("status_bar_height",
|
"dimen", "android");
|
if (resourceId > 0) {
|
result = getResources().getDimensionPixelSize(resourceId);
|
}
|
//设置状态栏文字颜色及图标为深色
|
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
|
result);
|
findViewById(R.id.v_status_bar).setLayoutParams(params);
|
} else {
|
findViewById(R.id.v_status_bar).setVisibility(View.GONE);
|
}
|
fl_hot_search = (FlowLayout) findViewById(R.id.fl_hot_search);
|
ll_no_net = (LinearLayout) findViewById(R.id.ll_no_net);
|
ll_no_data = (LinearLayout) findViewById(R.id.ll_no_data);
|
ll_request_failture = (LinearLayout) findViewById(R.id.ll_request_failture);
|
findViewById(R.id.iv_net_setting).setOnClickListener(this);
|
findViewById(R.id.tv_refresh).setOnClickListener(this);
|
sv_search = (ScrollView) findViewById(R.id.sv_search);
|
lv_history = (MyListView) findViewById(R.id.lv_search_history);
|
et_search = (AutoCompleteTextView) findViewById(R.id.et_search);
|
tv_back = (TextView) findViewById(R.id.tv_search_back);
|
tv_search = (TextView) findViewById(R.id.tv_search);
|
tv_clear_history = (TextView) findViewById(R.id.tv_clear_history);
|
tv_clear_history.setOnClickListener(this);
|
tv_back.setOnClickListener(this);
|
tv_search.setOnClickListener(this);
|
adapter = new HistoryAdapter(mList);
|
lv_history.setAdapter(adapter);
|
|
mChangeHelper = new ConnectivityChangeHelper(this,
|
new ConnectivityChangeHelper.OnConnectivityChangeListener() {
|
|
@Override
|
public void onNetworkUnAvailable() {
|
}
|
|
@Override
|
public void onNetworkAvailable() {
|
requestState(0);
|
if (hList.size() == 0) {
|
setHotData();
|
setHistory();
|
}
|
}
|
|
});
|
et_search.addTextChangedListener(new TextWatcher() {
|
@Override
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
|
}
|
|
@Override
|
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
|
}
|
|
@Override
|
public void afterTextChanged(Editable s) {
|
if (!TextUtils.isEmpty(s.toString())) {
|
et_search.setHint("");
|
suggestSearch(s.toString());
|
et_search.setCompoundDrawablesWithIntrinsicBounds(0, 0,
|
R.drawable.ic_clear, 0);
|
} else {
|
et_search.setCompoundDrawablesWithIntrinsicBounds(0, 0,
|
0, 0);
|
}
|
}
|
});
|
et_search.setOnTouchListener(new View.OnTouchListener() {
|
|
@Override
|
public boolean onTouch(View v, MotionEvent event) {
|
// getCompoundDrawables() 可以获取一个长度为4的数组,
|
// 存放drawableLeft,Right,Top,Bottom四个图片资源对象
|
// index=2 表示的是 drawableRight 图片资源对象
|
Drawable drawable = et_search.getCompoundDrawables()[2];
|
if (drawable == null)
|
return false;
|
|
if (event.getAction() != MotionEvent.ACTION_UP)
|
return false;
|
|
// drawable.getIntrinsicWidth() 获取drawable资源图片呈现的宽度
|
if (event.getX() > et_search.getWidth()
|
- et_search.getPaddingRight()
|
- drawable.getIntrinsicWidth()) {
|
et_search.setText("");
|
et_search.setHint("");
|
}
|
return false;
|
}
|
});
|
et_search.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
@Override
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
Intent intent = new Intent(SearchActivity.this, SearchResultActivity.class);
|
intent.putExtra("content", parent.getItemAtPosition(position).toString());
|
intent.putExtra("type", "normal");
|
startActivity(intent);
|
}
|
});
|
et_search.setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
|
@Override
|
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
|
if ((arg1 == EditorInfo.IME_ACTION_SEARCH || arg1 == EditorInfo.IME_ACTION_DONE)
|
&& !StringUtils.isEmpty(et_search.getText()
|
.toString())) {
|
Intent intent = new Intent(SearchActivity.this,
|
SearchResultActivity.class);
|
intent.putExtra("content", et_search.getText().toString());
|
intent.putExtra("type", "normal");
|
startActivity(intent);
|
return true;
|
} else if ((arg1 == EditorInfo.IME_ACTION_SEARCH || arg1 == EditorInfo.IME_ACTION_DONE)
|
&& !StringUtils.isEmpty(et_search.getHint()
|
.toString())) {
|
Intent intent = new Intent(SearchActivity.this,
|
SearchResultActivity.class);
|
intent.putExtra("content", et_search.getHint().toString());
|
intent.putExtra("type", "normal");
|
startActivity(intent);
|
return true;
|
}
|
|
return false;
|
}
|
});
|
setHotData();
|
}
|
|
private void suggestSearch(String key) {
|
ShoppingApi.getSuggestSearch(this, key, new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optString("code").equalsIgnoreCase("0")) {
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
List<String> list = gson.fromJson(
|
jsonObject.optJSONArray("data").toString(),
|
new TypeToken<List<String>>() {
|
}.getType());
|
ArrayAdapter<String> adapter = new ArrayAdapter<>(SearchActivity.this,
|
android.R.layout.simple_list_item_1,
|
list);
|
et_search.setAdapter(adapter);
|
adapter.notifyDataSetChanged();
|
}
|
}
|
|
@Override
|
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
|
super.onFailure(statusCode, headers, responseString, throwable);
|
}
|
});
|
}
|
|
List<String> mList = new ArrayList<>();
|
|
@Override
|
protected void onResume() {
|
super.onResume();
|
setHistory();
|
mChangeHelper.registerReceiver();
|
MobclickAgent.onPageStart("搜索页");
|
}
|
|
@Override
|
protected void onPause() {
|
super.onPause();
|
mChangeHelper.unregisterReceiver();
|
MobclickAgent.onPageEnd("搜索页");
|
}
|
|
private void setHistory() {
|
ShoppingApi.getHistorySearch(SearchActivity.this, new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optString("code").equalsIgnoreCase("0")) {
|
List<String> list = new ArrayList<String>();
|
JSONArray array = jsonObject.optJSONObject("data").optJSONArray("historySearchList");
|
for (int i = 0; i < array.length(); i++) {
|
list.add(array.optJSONObject(i).optString("name"));
|
}
|
mList.clear();
|
mList.addAll(list);
|
adapter.notifyDataSetChanged();
|
}
|
}
|
});
|
}
|
|
/**
|
* 清除搜索记录
|
*/
|
private void clearHistory() {
|
ShoppingApi.clearSearch(SearchActivity.this, new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optString("code").equalsIgnoreCase("0")) {
|
mList.clear();
|
adapter.notifyDataSetChanged();
|
}
|
}
|
});
|
}
|
|
private List<HotSearch> hList = new ArrayList<>();
|
|
private void setHotData() {
|
fl_hot_search.removeAllViews();
|
ShoppingApi.getHotSearch(SearchActivity.this, new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optString("code").equalsIgnoreCase("0")) {
|
hList.clear();
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
List<HotSearch> list = gson.fromJson(
|
jsonObject.optJSONObject("data").optJSONArray("hotSearchList").toString(),
|
new TypeToken<List<HotSearch>>() {
|
}.getType());
|
fl_hot_search.removeAllViews();
|
for (int i = 0; i < list.size(); i++) {
|
final TextView tv = new TextView(SearchActivity.this);
|
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
|
params.setMargins(0, DimenUtils.dip2px(SearchActivity.this, 8), DimenUtils.dip2px(SearchActivity.this, 8), 0);
|
tv.setLayoutParams(params);
|
tv.setPadding(DimenUtils.dip2px(SearchActivity.this, 5), 2, DimenUtils.dip2px(SearchActivity.this, 5), 2);
|
tv.setLines(1);
|
tv.setEllipsize(TextUtils.TruncateAt.END);
|
tv.setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_search));
|
tv.setPadding(DimenUtils.dip2px(SearchActivity.this, 5), DimenUtils.dip2px(SearchActivity.this, 3), DimenUtils.dip2px(SearchActivity.this, 5), DimenUtils.dip2px(SearchActivity.this, 3));
|
tv.setText(list.get(i).getName());
|
tv.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
Intent intent = new Intent(SearchActivity.this, SearchResultActivity.class);
|
intent.putExtra("content", tv.getText());
|
intent.putExtra("type", "normal");
|
startActivity(intent);
|
}
|
});
|
fl_hot_search.addView(tv);
|
}
|
hList.addAll(list);
|
Random random = new Random();
|
String key = getIntent().getStringExtra("key");
|
if (StringUtils.isEmpty(key)) {
|
et_search.setHint(list.get(random.nextInt(list.size())).getName());
|
} else {
|
et_search.setHint(key);
|
}
|
requestState(hList.size() == 0 ? 1 : 0);
|
} else {
|
if (hList.size() == 0)
|
requestState(2);
|
}
|
}
|
|
@Override
|
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
|
super.onFailure(statusCode, headers, responseString, throwable);
|
if (hList.size() == 0) {
|
if (NetUtils.getNetworkState(SearchActivity.this).equalsIgnoreCase(NetUtils.NETWORK_NONE)) {
|
requestState(3);
|
} else {
|
requestState(2);
|
}
|
} else {
|
if (NetUtils.getNetworkState(SearchActivity.this).equalsIgnoreCase(NetUtils.NETWORK_NONE)) {
|
SingleToast.showToast(SearchActivity.this, "网络未连接,请检测网络设置");
|
} else {
|
SingleToast.showToast(SearchActivity.this, "网络连接异常,请检测网络设置");
|
}
|
}
|
}
|
});
|
}
|
|
@Override
|
public void onClick(View v) {
|
switch (v.getId()) {
|
case R.id.tv_clear_history:
|
clearHistory();
|
break;
|
case R.id.tv_search_back:
|
finish();
|
break;
|
case R.id.tv_search:
|
if (StringUtils.isEmpty(et_search.getText() + "") && (StringUtils.isEmpty(et_search.getHint() + "") || et_search.getHint() == null)) {
|
SingleToast.showToast(SearchActivity.this, "请先输入搜索内容!");
|
} else {
|
Intent intent = new Intent(SearchActivity.this, SearchResultActivity.class);
|
if (!StringUtils.isEmpty(et_search.getHint() + "")) {
|
String content = et_search.getHint().toString();
|
content = content.trim();
|
intent.putExtra("content", content);
|
} else {
|
String content = et_search.getText().toString();
|
content = content.trim();
|
intent.putExtra("content", content);
|
}
|
intent.putExtra("type", "normal");
|
startActivity(intent);
|
}
|
break;
|
case R.id.iv_net_setting:
|
startActivity(new Intent(Settings.ACTION_SETTINGS));
|
break;
|
case R.id.tv_refresh:
|
startActivity(new Intent(Settings.ACTION_SETTINGS));
|
// requestState(0);
|
// setHistory();
|
// setHotData();
|
break;
|
}
|
}
|
|
class HistoryAdapter extends BaseAdapter {
|
List<String> mList;
|
|
public HistoryAdapter(List<String> list) {
|
mList = list;
|
}
|
|
@Override
|
public int getCount() {
|
return mList == null ? 0 : mList.size();
|
}
|
|
@Override
|
public Object getItem(int position) {
|
return mList.get(position);
|
}
|
|
@Override
|
public long getItemId(int position) {
|
return position;
|
}
|
|
@Override
|
public View getView(int position, View convertView, ViewGroup parent) {
|
final TextView tv = new TextView(SearchActivity.this);
|
tv.setText(mList.get(position));
|
tv.setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_search));
|
tv.setPadding(DimenUtils.dip2px(SearchActivity.this, 10), DimenUtils.dip2px(SearchActivity.this, 0), DimenUtils.dip2px(SearchActivity.this, 10), DimenUtils.dip2px(SearchActivity.this, 0));
|
tv.setGravity(Gravity.CENTER_VERTICAL);
|
tv.setLines(2);
|
tv.setEllipsize(TextUtils.TruncateAt.END);
|
tv.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
Intent intent = new Intent(SearchActivity.this, SearchResultActivity.class);
|
intent.putExtra("content", tv.getText().toString());
|
intent.putExtra("type", "normal");
|
startActivity(intent);
|
}
|
});
|
return tv;
|
}
|
}
|
|
/**
|
* 请求状态 0 数据正常展示;1 返回数据为空;2 网络请求失败;3 没有连接网络
|
*
|
* @param state
|
*/
|
private void requestState(int state) {
|
sv_search.setVisibility(state == 0 ? View.VISIBLE : View.GONE);
|
ll_no_data.setVisibility(state == 1 ? View.VISIBLE : View.GONE);
|
ll_request_failture.setVisibility(state == 2 ? View.VISIBLE : View.GONE);
|
ll_no_net.setVisibility(state == 3 ? View.VISIBLE : View.GONE);
|
}
|
}
|