模糊查詢、清空功能 、全選和取消
来源:互联网 发布:gta5怎么优化设置 编辑:程序博客网 时间:2024/04/29 16:17
輔助類: 、PinyinComparator PingYinUtil
1.把汉字转换成字母或拼音(PingYinUtil)
public static String getPingYin(String inputString) { HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); format.setCaseType(HanyuPinyinCaseType.UPPERCASE); format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); format.setVCharType(HanyuPinyinVCharType.WITH_V); char[] input = inputString.trim().toCharArray(); String output = ""; try { for (int i = 0; i < input.length; i++) { if(java.lang.Character.toString(input[i]).matches("[\\u4E00-\\u9FA5]+")) { String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i],format); output += temp[0]; } else{ output += java.lang.Character.toString(input[i]); } } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } return output; }
2.两个字符串之间进行比较(PinyinComparator)
public class PinyinComparator implements Comparator{@Overridepublic int compare(Object o1, Object o2) {String str1 = PingYinUtil.getPingYin((String) o1); String str2 = PingYinUtil.getPingYin((String) o2); return str1.compareTo(str2);}}
3.Adapter:
public class EditTextSearchAdapter extends BaseAdapter {private Context mcontext;private String[] data;private HashMap<Integer, Boolean > state=new HashMap<Integer, Boolean>();public EditTextSearchAdapter(Context context, String[] data) {this.mcontext = context;this.data = data;// 排序(实现了中英文混排)Arrays.sort(data, new PinyinComparator());}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn data.length;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn data[position];}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn 0;}/*** 全選chechbox*/public void allselect(){for(int i=0;i<data.length;i++){state.put(i, true);}notifyDataSetChanged();}/***全不選checkbox */public void noselect(){for(int i=0;i<data.length;i++){state.remove(i);}notifyDataSetChanged();}@Overridepublic View getView( final int position, View convertView, ViewGroup v) {String datainame = data[position];ViewHolder viewHolder = null;if (convertView == null) {convertView = LayoutInflater.from(mcontext).inflate(R.layout.listview_items, null);viewHolder = new ViewHolder();viewHolder.textuser = (TextView) convertView.findViewById(R.id.contactitem_catalog);viewHolder.textcontact = (TextView) convertView.findViewById(R.id.NumberItem);viewHolder.checkbox=(CheckBox) convertView.findViewById(R.id.checkBox1);convertView.setTag(viewHolder);} else {viewHolder = (ViewHolder) convertView.getTag();}String ck = convertchangfirstspell(datainame).substring(0, 1).toUpperCase().toString();if (position == 0) {viewHolder.textuser.setVisibility(View.VISIBLE);viewHolder.textuser.setText(ck);} else {String lastCatalog = convertchangfirstspell(data[position - 1]).substring(0, 1).toUpperCase().toString();if (ck.equals(lastCatalog)) {viewHolder.textuser.setVisibility(View.GONE);} else {viewHolder.textuser.setVisibility(View.VISIBLE);viewHolder.textuser.setText(ck);}}viewHolder.textcontact.setText(datainame);viewHolder.checkbox.setVisibility(CheckBox.VISIBLE);viewHolder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked){state.put(position, isChecked); } else{ state.remove(position); }}}); viewHolder.checkbox.setChecked(state.get(position)==null ? false :true);return convertView;// TODO Auto-generated method stub}class ViewHolder {TextView textuser;TextView textcontact;CheckBox checkbox;} //將第一個排列的首字母轉換成字符串public static String convertchangfirstspell(String chines) {String pinyinname = "";char[] chinsename = chines.toCharArray();HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();format.setCaseType(HanyuPinyinCaseType.UPPERCASE);format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);for (int i = 0; i < chinsename.length; i++) {if (chinsename[i] > 128) {try {pinyinname += PinyinHelper.toHanyuPinyinStringArray(chinsename[i], format)[0].charAt(0);} catch (Exception e) {e.printStackTrace();}} else {pinyinname += chinsename[i];}}return pinyinname;}}
4.主类MainActivity:
public class MainActivity extends Activity implements OnClickListener {private Context context;private ListView listview;private AutoCompleteTextView autosearch;private EditTextSearchAdapter adapter;// 判斷第一次是否為空public boolean isnull = true;private Drawable text_search;private Drawable text_clear;private Button bnt_select;private Button btn_noselect;// 对用户呢称进行排序private String[] data = { "lll", "kkk", "aaa", "add", "bad", "bed", "ccc","custom", "drak", "draw", "eee", "egae", "zzz", "zero", "feng","grad", "lei", "good" };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);context = getApplicationContext();InitView();autosearch.addTextChangedListener(textWatcher);autosearch.setOnTouchListener(txtSearch_OnTouch);autosearch.setFocusableInTouchMode(false);autosearch.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubautosearch.setFocusableInTouchMode(true);}});}public void InitView() {autosearch = (AutoCompleteTextView) findViewById(R.id.autosearch);bnt_select = (Button) findViewById(R.id.bnt_select);bnt_select.setOnClickListener(this);btn_noselect = (Button) findViewById(R.id.bnt_noselect);btn_noselect.setOnClickListener(this); final Resources rs = this.getResources();text_search = rs.getDrawable(R.drawable.txt_search_default);text_clear = rs.getDrawable(R.drawable.txt_search_clear);}Handler handler = new Handler() {public void handleMessage(Message msg) {if (msg.arg1 == 1) {listview = (ListView) findViewById(R.id.listView);listview.setAdapter(adapter);}}};public void onStart() {super.onStart();new Thread() {@Overridepublic void run() {adapter = new EditTextSearchAdapter(context, data);adapter.notifyDataSetChanged();Message message = handler.obtainMessage();message.arg1 = 1;handler.sendMessage(message);}}.start();} //动态查询TextWatcher textWatcher = new TextWatcher() { @Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {// TODO Auto-generated method stubsearchname(autosearch.getText().toString());}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {// TODO Auto-generated method stub}@Overridepublic void afterTextChanged(Editable s) {// TODO Auto-generated method stub if(TextUtils.isEmpty(s)){ if(!isnull){ autosearch.setCompoundDrawablesWithIntrinsicBounds(null, null, text_search, null); isnull=true; } } else{ if(isnull){ autosearch.setCompoundDrawablesWithIntrinsicBounds(null, null, text_clear, null); isnull=false; } }}};// 根據輸入的值來判斷是否和集合的數據值對應public void searchname(String name) {int length = 0;for (int i = 0; i < data.length; i++) {if (data[i].toUpperCase().contains(name.toUpperCase())) {length++;}}String[] msearchname = new String[length];int search = 0;for (int i = 0; i < data.length; i++) {if (data[i].toUpperCase().contains(name.toUpperCase())) {msearchname[search] = data[i];Log.v("this", msearchname[search]);search++;}}adapter = new EditTextSearchAdapter(context, msearchname);adapter.notifyDataSetChanged();Message msMessage = handler.obtainMessage();msMessage.arg1 = 1;handler.sendMessage(msMessage);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.bnt_select:adapter.allselect();break;case R.id.bnt_noselect:adapter.noselect();break;}}private OnTouchListener txtSearch_OnTouch = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: int curX = (int) event.getX(); if (curX > v.getWidth() - 38 && !TextUtils.isEmpty(autosearch.getText())) { autosearch.setText(""); int cacheInputType = autosearch.getInputType();// backup the input type autosearch.setInputType(InputType.TYPE_NULL);// disable soft input autosearch.onTouchEvent(event);// call native handler autosearch.setInputType(cacheInputType);// restore input type return true;// consume touch even } break; } return false; } };}
记住 :需添加一个jar包:pinyin4j-2.5.0.jar
0 0
- 模糊查詢、清空功能 、全選和取消
- 代碼框增加[全選][拷貝][剪下][貼上][清空]功能
- easyUI 相关清空功能
- 创建通讯录实现(增,删,查,改,显示,清空)功能
- javascript数组的属性、方法和清空-最全!!!(必看)
- 清空 和 过滤文件类型
- 清空剪切板和回收站
- 清空StringBuffer和StringBuilder
- Android Edittext 清空按钮功能 自定义
- 全选,清空功能实现,JSP
- ClearEditText带有清空功能的EditText
- 带有清空功能的EditTtxt
- 带有清空功能的EditTtxt
- easyui 日历添加清空功能
- IBatis模糊查詢
- PyQT实现菜单中的复制,全选和清空的功能
- android项目 之 记事本(7)----- 手写功能之删除、恢复和清空
- android项目 之 记事本(8) ----- 画板功能之撤销、恢复和清空
- oracle 导入数据时对 & 和 ' 特殊字符处理
- php header的用法小结
- Linux C编程小例子——pwd命令的实现
- 关联规则学习
- Guidelines for Redis clients with support for Redis Sentinel
- 模糊查詢、清空功能 、全選和取消
- Delphi - 数组 详解
- No content provider found for permission revoke:
- PHP异常处理
- 开机启动服务
- 转发┏ (^ω^)=☞安卓手机安装体验WIN98、XP等X86系统
- Cocos2D-x A星寻路法
- RouteTask执行最短路径计算时“无法完成 操作”问题分析解决
- 防止二次提交