模糊查詢、清空功能 、全選和取消

来源:互联网 发布: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
原创粉丝点击