热门搜索词汇的呈现的自定义控件

来源:互联网 发布:les怎么滚床单 知乎 编辑:程序博客网 时间:2024/05/23 15:49
package com.small.view;import java.util.ArrayList;import java.util.List;import android.annotation.SuppressLint;import android.content.Context;import android.util.AttributeSet;import android.util.DisplayMetrics;import android.view.View;import android.view.ViewGroup;import android.widget.RelativeLayout;import android.widget.Toast;@SuppressLint("NewApi")public class WrapTextView extends RelativeLayout {    private List<Position> lists = new ArrayList<Position>();    private static final int marginV = 10;//子textview垂直间距    private static final int marginH = 40;//子textview水平间距    public WrapTextView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    public WrapTextView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public WrapTextView(Context context) {        super(context);    }    private float getDensity(){        return getResources().getDisplayMetrics().density;    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        int widthParent = MeasureSpec.getSize(widthMeasureSpec);        int childCount = getChildCount();        Position position = null;        int j = 0;        int topSum = 0;        int mBottom = 0;         for (int i = 0; i < childCount; i++) {            View childView = getChildAt(i);            position = new Position();            position.left = getLeft(i - j, i);            position.right = position.left                    + childView.getMeasuredWidth();            if (position.right > widthParent || position.left > widthParent) {                j = i;                position.left = getLeft(i - j, i);                position.right = position.left                        + childView.getMeasuredWidth();//              topSum = topSum + childView.getMeasuredHeight() + (int)(getDensity() * marginV);                topSum = topSum + childView.getMeasuredHeight() + (int)marginV;            }            mBottom = topSum + getChildAt(i).getMeasuredHeight();            position.top = topSum;            position.bottom = mBottom;            lists.add(position);        }        setMeasuredDimension(widthParent, mBottom);    }    private int getLeft(int indexRow, int indexChild) {        if (indexRow != 0) {            return getLeft(indexRow - 1, indexChild - 1)                    + getChildAt(indexChild - 1).getMeasuredWidth() + (int)(getDensity() * marginH);        } else {            return 0;        }    }    @Override    protected void onLayout(boolean changed, int l, int t, int r, int b) {        for (int i = 0; i < getChildCount(); i++) {            Position position = lists.get(i);            getChildAt(i).layout(position.left, position.top, position.right,                    position.bottom);        }    }    private class Position {        private int left;        private int top;        private int right;        private int bottom;    }}

在Activity中:

package com.small.activity;import java.io.UnsupportedEncodingException;import java.lang.annotation.Annotation;import java.net.URLEncoder;import java.util.ArrayList;import java.util.List;import com.example.small.R;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;import com.handmark.pulltorefresh.library.PullToRefreshListView;import com.lidroid.xutils.HttpUtils;import com.lidroid.xutils.exception.HttpException;import com.lidroid.xutils.http.RequestParams;import com.lidroid.xutils.http.ResponseInfo;import com.lidroid.xutils.http.callback.RequestCallBack;import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;import com.lidroid.xutils.view.annotation.event.OnClick;import com.small.BaseApplication;import com.small.bean.HotSearchListBean;import com.small.bean.HotSearchListBean.HotSearchBean;import com.small.bean.SearchResult;import com.small.bean.SearchResult.ItemResult;import com.small.bean.SearchResult.SearchResultData;import com.small.config.Constants;import com.small.view.WrapTextView;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.text.Editable;import android.text.TextUtils;import android.text.TextWatcher;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.Window;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ImageView;import android.widget.ListView;import android.widget.ProgressBar;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;public class SearchActivity extends Activity implements OnClickListener,        OnRefreshListener2<ListView> {    private RelativeLayout rl_back;    private EditText et_search;    private RelativeLayout iv_search;    private WrapTextView wtv_rsch;    private RelativeLayout rl_history;    private TextView tv_noHistory;    private HttpUtils httpUtils;    private static final int PAGESIZE = 10;    private int pageNumber = 1;    private RelativeLayout rl_searchList;    private RelativeLayout rl_defaul;    private String searchListUrl;    private String hotListUrl;    private static final int num = 10;    private Gson gson;    private List<String> historyList = new ArrayList<String>();    private WrapTextView wtv_history;    private PullToRefreshListView lv_searchList;    private String content;    private MyAdapter myAdapter;    private List<ItemResult> searchResult;    private TextView tv;    private TextView tv_noData;    private ProgressBar progressbar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.search_activity);        BaseApplication.getInstance().addActivity(this);        initView();        initData();    }    private void initView() {        httpUtils = new HttpUtils();        gson = new Gson();        rl_defaul = (RelativeLayout) findViewById(R.id.rl_defaul);        rl_searchList = (RelativeLayout) findViewById(R.id.rl_searchList);        rl_back = (RelativeLayout) findViewById(R.id.rl_back);        et_search = (EditText) findViewById(R.id.et_search);        iv_search = (RelativeLayout) findViewById(R.id.iv_search);        wtv_rsch = (WrapTextView) findViewById(R.id.wtv_rsch);        rl_history = (RelativeLayout) findViewById(R.id.rl_history);        tv_noHistory = (TextView) findViewById(R.id.tv_noHistory);        wtv_history = (WrapTextView) findViewById(R.id.wtv_history);        lv_searchList = (PullToRefreshListView) findViewById(R.id.lv_searchList);        tv_noData = (TextView) findViewById(R.id.tv_noData);        progressbar = (ProgressBar) findViewById(R.id.progressbar);    }    private void initData() {        rl_back.setOnClickListener(this);        iv_search.setOnClickListener(this);        lv_searchList.setOnRefreshListener(this);        lv_searchList.setMode(Mode.BOTH);        lv_searchList.getLoadingLayoutProxy(false, true).setPullLabel(                getString(R.string.pull_to_refresh_pull_label));        lv_searchList.getLoadingLayoutProxy(false, true).setRefreshingLabel(                getString(R.string.pull_to_load_loading_label));        lv_searchList.getLoadingLayoutProxy(false, true).setReleaseLabel(                getString(R.string.pull_to_refresh_release_label));        // 热搜词汇 搜索        searchForHot();        // 搜索历史        String historyForSearch = Constants.getHistoryForSearch();        if (!TextUtils.isEmpty(historyForSearch)) {            historyList = gson.fromJson(historyForSearch,                    new TypeToken<List<String>>() {                    }.getType());            wtv_history.setVisibility(View.VISIBLE);            tv_noHistory.setVisibility(View.GONE);            for (int i = 0; i < historyList.size(); i++) {                if (i >= 15) {                    break;                }                tv = (TextView) View                        .inflate(this, R.layout.textview_wrap, null);                tv.setText(historyList.get(i));                tv.setTag(historyList.get(i));                tv.setOnClickListener(new OnClickListener() {                    @Override                    public void onClick(View v) {                        content = (String) v.getTag();                        et_search.setText(content);                        findHistoryAndReplace();                        searchForShow2();                    }                });                wtv_history.addView(tv);            }        }        et_search.addTextChangedListener(new TextWatcher() {            @Override            public void onTextChanged(CharSequence s, int start, int before, int count) {                content = s.toString();                searchForShow();            }            @Override            public void beforeTextChanged(CharSequence s, int start, int count,                    int after) {            }            @Override            public void afterTextChanged(Editable s) {            }        });    }    private void searchForHot() {        hotListUrl = Constants.hotSearch + "pageNum=1&pageSize=" + 15;        progressbar.setVisibility(View.VISIBLE);        httpUtils.send(HttpMethod.GET, hotListUrl,                new RequestCallBack<String>() {                    @Override                    public void onSuccess(ResponseInfo<String> responseInfo) {                        HotSearchListBean fromJson = gson.fromJson(                                responseInfo.result, HotSearchListBean.class);                        if (fromJson != null && fromJson.getData().size() > 0) {                            handleRsch(fromJson.getData());                        }                        progressbar.setVisibility(View.GONE);                        rl_defaul.setVisibility(View.VISIBLE);                    }                    @Override                    public void onFailure(HttpException error, String msg) {                        progressbar.setVisibility(View.GONE);                        rl_defaul.setVisibility(View.VISIBLE);                        Toast.makeText(SearchActivity.this, "网络访问失败",                                Toast.LENGTH_SHORT).show();                    }                });    }    protected void handleRsch(List<HotSearchBean> data) {        // Log.e("lpc", String.valueOf(data.size()));        for (int i = 0; i < data.size(); i++) {            tv = (TextView) View.inflate(this, R.layout.textview_wrap, null);            tv.setText(data.get(i).getKeyWord());            tv.setTag(data.get(i).getKeyWord());            tv.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    content = (String) v.getTag();                    et_search.setText(content);                    findHistoryAndReplace();                    searchForShow2();                }            });            wtv_rsch.addView(tv);        }    }    @Override    public void onClick(View v) {        switch (v.getId()) {        case R.id.rl_back:            this.finish();            break;        case R.id.iv_search:            searchForShow();            break;        default:            break;        }    }    private void searchForShow() {        content = et_search.getText().toString().trim();        if (TextUtils.isEmpty(content)) {            Toast.makeText(this, "请输入诉求关键字", Toast.LENGTH_SHORT).show();            return;        }//      findHistoryAndReplace();        pageNumber = 1;        searchForShow2();    }    private void findHistoryAndReplace() {        if (historyList.contains(content)) {            historyList.remove(content);        }        historyList.add(0, content);    }    private void searchForShow2() {        RequestParams params = new RequestParams();        params.addBodyParameter("condition", content);        params.addBodyParameter("pageSize", PAGESIZE + "");        params.addBodyParameter("pageNum", pageNumber + "");        params.addBodyParameter("resolved", 2 + "");        params.addBodyParameter("systemType1", -1 + "");        params.addBodyParameter("systemType2", -1 + "");        params.addBodyParameter("systemType3", -1 + "");        //停止之前的请求        httpUtils.getHttpClient().getConnectionManager().shutdown();        httpUtils = new HttpUtils();        progressbar.setVisibility(View.VISIBLE);        httpUtils.send(HttpMethod.POST, Constants.search, params,                new RequestCallBack<String>() {                    @Override                    public void onSuccess(ResponseInfo<String> responseInfo) {                        String result = responseInfo.result;                        result = result.replace("{}", "\"\"");                        handleSearch(gson.fromJson(result, SearchResult.class).data);                        progressbar.setVisibility(View.GONE);                    }                    @Override                    public void onFailure(HttpException error, String msg) {                        progressbar.setVisibility(View.GONE);//                      Toast.makeText(SearchActivity.this, "网络访问失败",//                              Toast.LENGTH_SHORT).show();                    }                });    }    private void handleSearch(SearchResultData data) {        rl_defaul.setVisibility(View.GONE);        rl_searchList.setVisibility(View.VISIBLE);        if (data == null || data.result.size() == 0) {////          if(searchResult == null){//              Toast.makeText(this, "没有搜索到相关数据", Toast.LENGTH_SHORT).show();//          }else             if (searchResult == null || searchResult.size() <= 0) {                Toast.makeText(this, "没有搜索到相关数据", Toast.LENGTH_SHORT).show();                tv_noData.setVisibility(View.VISIBLE);                lv_searchList.setVisibility(View.GONE);            }else{                Toast.makeText(this, "已加载全部数据", Toast.LENGTH_SHORT).show();            }        } else {            tv_noData.setVisibility(View.GONE);            lv_searchList.setVisibility(View.VISIBLE);            if (pageNumber == 1) {                searchResult = data.result;                myAdapter = new MyAdapter();                lv_searchList.setAdapter(myAdapter);            } else {                searchResult.addAll(data.result);                myAdapter.notifyDataSetChanged();            }            pageNumber++;        }        lv_searchList.onRefreshComplete();    }    private class MyAdapter extends BaseAdapter {        @Override        public int getCount() {            return searchResult.size();        }        @Override        public Object getItem(int position) {            return searchResult.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            final ItemResult itemResult = searchResult.get(position);            ViewHolder holder = null;            if (convertView == null) {                holder = new ViewHolder();                convertView = View.inflate(SearchActivity.this,                        R.layout.listview_item_sousuo, null);                holder.tv_title = (TextView) convertView                        .findViewById(R.id.tv_title);                holder.tv_system = (TextView) convertView                        .findViewById(R.id.tv_system);                holder.tv_name = (TextView) convertView                        .findViewById(R.id.tv_name);                holder.tv_date = (TextView) convertView                        .findViewById(R.id.tv_date);                holder.convertView = convertView;                convertView.setTag(holder);            } else {                holder = (ViewHolder) convertView.getTag();            }            holder.tv_title.setText(itemResult.title);            holder.tv_system.setText(itemResult.systemTypeName1 == null ? "" : itemResult.systemTypeName1                    + (itemResult.systemTypeName2 == null ? "" : " > "                            + itemResult.systemTypeName2) +                             (itemResult.systemTypeName3 == null ? "": " > " +itemResult.systemTypeName3));            holder.tv_name.setText(itemResult.userNick);            holder.tv_date.setText(itemResult.createDate);            holder.convertView.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    //TODO                    findHistoryAndReplace();                    Intent intent = new Intent(SearchActivity.this, AppealDetailActivity.class);                    BaseApplication.id = Integer.valueOf(itemResult.processId);                    SearchActivity.this.startActivity(intent);                }            });            return convertView;        }    }    private class ViewHolder {        TextView tv_title, tv_system, tv_name, tv_date;        View convertView;    }    @Override    protected void onDestroy() {        super.onDestroy();        saveHistory(historyList);    }    private void saveHistory(List<String> lists) {        if (historyList.size() > 0) {            int index = historyList.size();            if (index >= 15) {                index = 15;            }            Constants.setHistoryForSearch(gson.toJson(historyList.subList(0,                    index)));        }    }    @Override    public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {        pageNumber = 1;        searchForShow2();    }    @Override    public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {        searchForShow2();    }}
0 0
原创粉丝点击