热门搜索词汇的呈现的自定义控件
来源:互联网 发布: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
- 热门搜索词汇的呈现的自定义控件
- 自定义控件(6)CompositeControl的呈现
- 一款自定义的热门搜索组件
- android之自定义控件一控件的呈现机制
- 控件呈现的顺序
- Datatables:列的自定义呈现
- Android 自定义控件:打造流布局实现热门搜索标签
- Android 自定义控件:打造流布局实现热门搜索标签
- ASP.NET2.0自定义控件开发(1)----呈现控件的外观
- 五分钟了解你不得不知道的人工智能热门词汇
- 控件的呈现方法(Rendering)的内核
- 控件的呈现方法(Rendering)的内核
- .net控件呈现的 html标签
- ASP.NET服务器控件的呈现顺序
- FormView控件的数据呈现和处理
- Tablet PC 手写输入的自定义呈现
- 最热门的K个搜索串
- 关于DataGrid Web控件的热门问题
- 3.2 Zend_Db_Select
- android 事件分发机制
- css限制文本行数
- 码农看看应该有用
- 正则里的一些小问题
- 热门搜索词汇的呈现的自定义控件
- reducebykey groupbykey combinebykey
- LLdb篇1教你使用faceBook的chisel来提高调试效率
- Spring boot(2)-配置详解
- process launch failed:time out trying to launch app
- achartengine动态折线图XYMultipleSeriesRenderer 属性
- elasticsearch的一些基本概念
- assert()函数用法总结
- kernel panic分析