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

輔助類: 、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{


@Override
public 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());


}


@Override
public int getCount() {
// TODO Auto-generated method stub
return data.length;
}


@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return data[position];
}


@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 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();
}


@Override
public 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() {

@Override
public 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" };


@Override
protected 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() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
autosearch.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() {
@Override
public void run() {
adapter = new EditTextSearchAdapter(context, data);
adapter.notifyDataSetChanged();
Message message = handler.obtainMessage();
message.arg1 = 1;
handler.sendMessage(message);
}
}.start();
}
          //动态查询
TextWatcher textWatcher = new TextWatcher() {
   
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
searchname(autosearch.getText().toString());
}


@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub


}


@Override
public 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);


}


@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值