您的位置:首页 > 其它

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

2013-12-31 16:25 253 查看
輔助類: 、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 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: