模糊查詢、清空功能 、全選和取消
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
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
相关文章推荐
- UART总线
- RelativeLayout 相对布局
- 多线程环境下单例模式
- 10个值得关注的Geek网站
- OpenGL程序Demo(基于Mingw的GCC)
- RouteTask执行最短路径计算时“无法完成 操作”问题分析解决
- 网盟
- seed-dvs6467 encodedecode实例 采集的图像质量很差,只有隔行显示,而且每帧图像不断的往下移动?
- oracle 自动建表
- Redis介绍以及安装(Linux)
- delphi中in的使用
- ios官方文档( dom数据解析用到方法)
- Json解析工具Jackson(使用注解) .
- Kernel中rfcomm层的初始化
- PHP基础语法
- 华为终端内部总结:盈利超额 将发放特别奖金
- logrotate简单实现各种日志自动轮转
- 红黑树(Red Black Tree)
- Oracle comment on的用法
- 前端网页性能最佳实践