转载请注明出处:http://blog.csdn.net/xiaanming/article/details/12684155
前段时间因为换工作的缘故又恰巧碰到国庆节,所以有段时间自己没有更新博客了,过完国庆到新公司报道,感觉还不错,就是现在住的地方离新公司有点远,地铁20站,伤不起啊,我每天早上7点多就要起床,然后屁颠屁颠的去挤地铁上班,晚上下班还要挤地铁,先不说路程远,车费一天就要10几块,我的银子啊,有坐龙华线去上班的深圳程序员不?听说那条线上班高峰期很挤?我没在上班高峰期坐过那趟车,我在民治那边找了个房子,离华强北也不远,关键房租便宜,哈哈,乐开花了,下个礼拜就要搬过去啦
不扯了,回到主题,今天给大家带来ListView的A-Z字母排序和过滤搜索功能并且实现汉字转成拼音的功能,我们知道一般我们对联系人,城市列表等实现A-Z的排序,因为联系人和城市列表我们可以直接从数据库中获取他的汉字拼音,而对于一般的数据,我们怎么实现A-Z的排序,我们需要将汉字转换成拼音就行了,接下来就带大家实现一般数据的A-Z排序功能,首先先看下效果图
上面是一个带删除按钮的EditText,我们在输入框中输入可以自动过滤出我们想要的东西,当输入框中没有数据自动替换到原来的数据列表,然后下面一个ListView用来显示数据列表,右侧是一个字母索引表,当我们点击不同的字母,ListView会定位到该字母地方,了解了布局之后,我们先看下项目结构吧

我按照项目中类的顺序来一一介绍其功能
1.SortModel 一个实体类,里面一个是ListView的name,另一个就是显示的name拼音的首字母
<div class="dp-highlighter bg_java" style="color: #000000;">
<div class="bar">
<div class="tools" style="color: silver;">
**[java]** [view plain](http://blog.csdn.net/xiaanming/article/details/12684155#)[copy](http://blog.csdn.net/xiaanming/article/details/12684155#)[](https://code.csdn.net/snippets/111689)[](https://code.csdn.net/snippets/111689/fork)
<div>
</div>
</div>
</div>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">package</span> com.example.sortlistview; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">class</span> SortModel { </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> String name; <span class="comment" style="color: #008200;">//显示的数据</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> String sortLetters; <span class="comment" style="color: #008200;">//显示数据拼音的首字母</span> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> String getName() { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> name; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> setName(String name) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">this</span>.name = name; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> String getSortLetters() { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> sortLetters; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> setSortLetters(String sortLetters) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">this</span>.sortLetters = sortLetters; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;">} </span>
</div>
<span style="color: #000000;">
2.SideBar类就是ListView右侧的字母索引View,我们需要使用setTextView(TextView mTextDialog)来设置用来显示当前按下的字母的TextView,以及使用setOnTouchingLetterChangedListener方法来设置回调接口,在回调方法onTouchingLetterChanged(String s)中来处理不同的操作
<div class="dp-highlighter bg_java" style="color: #000000;">
<div class="bar">
<div class="tools" style="color: silver;">
**[java]** [view plain](http://blog.csdn.net/xiaanming/article/details/12684155#)[copy](http://blog.csdn.net/xiaanming/article/details/12684155#)[](https://code.csdn.net/snippets/111689)[](https://code.csdn.net/snippets/111689/fork)
<div>
</div>
</div>
</div>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">package</span> com.example.sortlistview; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.content.Context; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.graphics.Canvas; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.graphics.Color; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.graphics.Paint; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.graphics.Typeface; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.graphics.drawable.ColorDrawable; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.util.AttributeSet; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.view.MotionEvent; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.view.View; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.widget.TextView; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">class</span> SideBar <span class="keyword" style="font-weight: bold; color: #006699;">extends</span> View { </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">// 触摸事件</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> OnTouchingLetterChangedListener onTouchingLetterChangedListener; </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">// 26个字母</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">static</span> String[] b = { <span class="string" style="color: blue;">“A”</span>, <span class="string" style="color: blue;">“B”</span>, <span class="string" style="color: blue;">“C”</span>, <span class="string" style="color: blue;">“D”</span>, <span class="string" style="color: blue;">“E”</span>, <span class="string" style="color: blue;">“F”</span>, <span class="string" style="color: blue;">“G”</span>, <span class="string" style="color: blue;">“H”</span>, <span class="string" style="color: blue;">“I”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“J”</span>, <span class="string" style="color: blue;">“K”</span>, <span class="string" style="color: blue;">“L”</span>, <span class="string" style="color: blue;">“M”</span>, <span class="string" style="color: blue;">“N”</span>, <span class="string" style="color: blue;">“O”</span>, <span class="string" style="color: blue;">“P”</span>, <span class="string" style="color: blue;">“Q”</span>, <span class="string" style="color: blue;">“R”</span>, <span class="string" style="color: blue;">“S”</span>, <span class="string" style="color: blue;">“T”</span>, <span class="string" style="color: blue;">“U”</span>, <span class="string" style="color: blue;">“V”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“W”</span>, <span class="string" style="color: blue;">“X”</span>, <span class="string" style="color: blue;">“Y”</span>, <span class="string" style="color: blue;">“Z”</span>, <span class="string" style="color: blue;">“#”</span> }; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> Paint paint = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Paint(); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> TextView mTextDialog; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * 为SideBar设置显示字母的TextView</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * @param mTextDialog</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> setTextView(TextView mTextDialog) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">this</span>.mTextDialog = mTextDialog; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> SideBar(Context context, AttributeSet attrs, <span class="keyword" style="font-weight: bold; color: #006699;">int</span> defStyle) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">super</span>(context, attrs, defStyle); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> SideBar(Context context, AttributeSet attrs) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">super</span>(context, attrs); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> SideBar(Context context) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">super</span>(context); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * 重写这个方法</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">protected</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> onDraw(Canvas canvas) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">super</span>.onDraw(canvas); </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">// 获取焦点改变背景颜色.</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> height = getHeight();<span class="comment" style="color: #008200;">// 获取对应高度</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> width = getWidth(); <span class="comment" style="color: #008200;">// 获取对应宽度</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> singleHeight = height / b.length;<span class="comment" style="color: #008200;">// 获取每一个字母的高度</span> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">for</span> (<span class="keyword" style="font-weight: bold; color: #006699;">int</span> i = <span class="number" style="color: #c00000;"></span>; i < b.length; i++) { </span>
- <span style="color: black;"> paint.setColor(Color.rgb(<span class="number" style="color: #c00000;">33</span>, <span class="number" style="color: #c00000;">65</span>, <span class="number" style="color: #c00000;">98</span>)); </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">// paint.setColor(Color.WHITE);</span> </span>
- <span style="color: black;"> paint.setTypeface(Typeface.DEFAULT_BOLD); </span>
- <span style="color: black;"> paint.setAntiAlias(<span class="keyword" style="font-weight: bold; color: #006699;">true</span>); </span>
- <span style="color: black;"> paint.setTextSize(<span class="number" style="color: #c00000;">20</span>); </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">// 选中的状态</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (i == choose) { </span>
- <span style="color: black;"> paint.setColor(Color.parseColor(<span class="string" style="color: blue;">“#3399ff”</span>)); </span>
- <span style="color: black;"> paint.setFakeBoldText(<span class="keyword" style="font-weight: bold; color: #006699;">true</span>); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">// x坐标等于中间-字符串宽度的一半.</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">float</span> yPos = singleHeight * i + singleHeight; </span>
- <span style="color: black;"> canvas.drawText(b[i], xPos, yPos, paint); </span>
- <span style="color: black;"> paint.reset();<span class="comment" style="color: #008200;">// 重置画笔</span> </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">boolean</span> dispatchTouchEvent(MotionEvent event) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">final</span> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> action = event.getAction(); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">final</span> <span class="keyword" style="font-weight: bold; color: #006699;">float</span> y = event.getY();<span class="comment" style="color: #008200;">// 点击y坐标</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">final</span> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> oldChoose = choose; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">final</span> OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">final</span> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> c = (<span class="keyword" style="font-weight: bold; color: #006699;">int</span>) (y / getHeight() * b.length);<span class="comment" style="color: #008200;">// 点击y坐标所占总高度的比例*b数组的长度就等于点击b中的个数.</span> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">switch</span> (action) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">case</span> MotionEvent.ACTION_UP: </span>
- <span style="color: black;"> setBackgroundDrawable(<span class="keyword" style="font-weight: bold; color: #006699;">new</span> ColorDrawable(<span class="number" style="color: #c00000;">0x00000000</span>)); </span>
- <span style="color: black;"> invalidate(); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (mTextDialog != <span class="keyword" style="font-weight: bold; color: #006699;">null</span>) { </span>
- <span style="color: black;"> mTextDialog.setVisibility(View.INVISIBLE); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">break</span>; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">default</span>: </span>
- <span style="color: black;"> setBackgroundResource(R.drawable.sidebar_background); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (oldChoose != c) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (c >= <span class="number" style="color: #c00000;"></span> && c < b.length) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (listener != <span class="keyword" style="font-weight: bold; color: #006699;">null</span>) { </span>
- <span style="color: black;"> listener.onTouchingLetterChanged(b[c]); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (mTextDialog != <span class="keyword" style="font-weight: bold; color: #006699;">null</span>) { </span>
- <span style="color: black;"> mTextDialog.setText(b[c]); </span>
- <span style="color: black;"> mTextDialog.setVisibility(View.VISIBLE); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> choose = c; </span>
- <span style="color: black;"> invalidate(); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">break</span>; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> <span class="keyword" style="font-weight: bold; color: #006699;">true</span>; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * 向外公开的方法</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * </span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * @param onTouchingLetterChangedListener</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> setOnTouchingLetterChangedListener( </span>
- <span style="color: black;"> OnTouchingLetterChangedListener onTouchingLetterChangedListener) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">this</span>.onTouchingLetterChangedListener = onTouchingLetterChangedListener; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * 接口</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * </span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * @author coder</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * </span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">interface</span> OnTouchingLetterChangedListener { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> onTouchingLetterChanged(String s); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;">} </span>
</div>
3.CharacterParser 这个类是将汉字转换成拼音的类,该拼音没有声调的,该类是单例类,其中定义了三个方法,在这个demo中用到的是getSelling(String chs)方法,将词组转换成拼音
<div class="dp-highlighter bg_java" style="color: #000000;">
<div class="bar">
<div class="tools" style="color: silver;">
**[java]** [view plain](http://blog.csdn.net/xiaanming/article/details/12684155#)[copy](http://blog.csdn.net/xiaanming/article/details/12684155#)[](https://code.csdn.net/snippets/111689)[](https://code.csdn.net/snippets/111689/fork)
<div>
</div>
</div>
</div>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">package</span> com.example.sortlistview; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * Java汉字转换为拼音</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * </span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">class</span> CharacterParser { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">static</span> String[] pystr = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> String[] {<span class="string" style="color: blue;">“a”</span>, <span class="string" style="color: blue;">“ai”</span>, <span class="string" style="color: blue;">“an”</span>, <span class="string" style="color: blue;">“ang”</span>, <span class="string" style="color: blue;">“ao”</span>, <span class="string" style="color: blue;">“ba”</span>, <span class="string" style="color: blue;">“bai”</span>, <span class="string" style="color: blue;">“ban”</span>, <span class="string" style="color: blue;">“bang”</span>, <span class="string" style="color: blue;">“bao”</span>, <span class="string" style="color: blue;">“bei”</span>, <span class="string" style="color: blue;">“ben”</span>, <span class="string" style="color: blue;">“beng”</span>, <span class="string" style="color: blue;">“bi”</span>, <span class="string" style="color: blue;">“bian”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“biao”</span>, <span class="string" style="color: blue;">“bie”</span>, <span class="string" style="color: blue;">“bin”</span>, <span class="string" style="color: blue;">“bing”</span>, <span class="string" style="color: blue;">“bo”</span>, <span class="string" style="color: blue;">“bu”</span>, <span class="string" style="color: blue;">“ca”</span>, <span class="string" style="color: blue;">“cai”</span>, <span class="string" style="color: blue;">“can”</span>, <span class="string" style="color: blue;">“cang”</span>, <span class="string" style="color: blue;">“cao”</span>, <span class="string" style="color: blue;">“ce”</span>, <span class="string" style="color: blue;">“ceng”</span>, <span class="string" style="color: blue;">“cha”</span>, <span class="string" style="color: blue;">“chai”</span>, <span class="string" style="color: blue;">“chan”</span>, <span class="string" style="color: blue;">“chang”</span>, <span class="string" style="color: blue;">“chao”</span>, <span class="string" style="color: blue;">“che”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“chen”</span>, <span class="string" style="color: blue;">“cheng”</span>, <span class="string" style="color: blue;">“chi”</span>, <span class="string" style="color: blue;">“chong”</span>, <span class="string" style="color: blue;">“chou”</span>, <span class="string" style="color: blue;">“chu”</span>, <span class="string" style="color: blue;">“chuai”</span>, <span class="string" style="color: blue;">“chuan”</span>, <span class="string" style="color: blue;">“chuang”</span>, <span class="string" style="color: blue;">“chui”</span>, <span class="string" style="color: blue;">“chun”</span>, <span class="string" style="color: blue;">“chuo”</span>, <span class="string" style="color: blue;">“ci”</span>, <span class="string" style="color: blue;">“cong”</span>, <span class="string" style="color: blue;">“cou”</span>, <span class="string" style="color: blue;">“cu”</span>, <span class="string" style="color: blue;">“cuan”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“cui”</span>, <span class="string" style="color: blue;">“cun”</span>, <span class="string" style="color: blue;">“cuo”</span>, <span class="string" style="color: blue;">“da”</span>, <span class="string" style="color: blue;">“dai”</span>, <span class="string" style="color: blue;">“dan”</span>, <span class="string" style="color: blue;">“dang”</span>, <span class="string" style="color: blue;">“dao”</span>, <span class="string" style="color: blue;">“de”</span>, <span class="string" style="color: blue;">“deng”</span>, <span class="string" style="color: blue;">“di”</span>, <span class="string" style="color: blue;">“dian”</span>, <span class="string" style="color: blue;">“diao”</span>, <span class="string" style="color: blue;">“die”</span>, <span class="string" style="color: blue;">“ding”</span>, <span class="string" style="color: blue;">“diu”</span>, <span class="string" style="color: blue;">“dong”</span>, <span class="string" style="color: blue;">“dou”</span>, <span class="string" style="color: blue;">“du”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“duan”</span>, <span class="string" style="color: blue;">“dui”</span>, <span class="string" style="color: blue;">“dun”</span>, <span class="string" style="color: blue;">“duo”</span>, <span class="string" style="color: blue;">“e”</span>, <span class="string" style="color: blue;">“en”</span>, <span class="string" style="color: blue;">“er”</span>, <span class="string" style="color: blue;">“fa”</span>, <span class="string" style="color: blue;">“fan”</span>, <span class="string" style="color: blue;">“fang”</span>, <span class="string" style="color: blue;">“fei”</span>, <span class="string" style="color: blue;">“fen”</span>, <span class="string" style="color: blue;">“feng”</span>, <span class="string" style="color: blue;">“fo”</span>, <span class="string" style="color: blue;">“fou”</span>, <span class="string" style="color: blue;">“fu”</span>, <span class="string" style="color: blue;">“ga”</span>, <span class="string" style="color: blue;">“gai”</span>, <span class="string" style="color: blue;">“gan”</span>, <span class="string" style="color: blue;">“gang”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“gao”</span>, <span class="string" style="color: blue;">“ge”</span>, <span class="string" style="color: blue;">“gei”</span>, <span class="string" style="color: blue;">“gen”</span>, <span class="string" style="color: blue;">“geng”</span>, <span class="string" style="color: blue;">“gong”</span>, <span class="string" style="color: blue;">“gou”</span>, <span class="string" style="color: blue;">“gu”</span>, <span class="string" style="color: blue;">“gua”</span>, <span class="string" style="color: blue;">“guai”</span>, <span class="string" style="color: blue;">“guan”</span>, <span class="string" style="color: blue;">“guang”</span>, <span class="string" style="color: blue;">“gui”</span>, <span class="string" style="color: blue;">“gun”</span>, <span class="string" style="color: blue;">“guo”</span>, <span class="string" style="color: blue;">“ha”</span>, <span class="string" style="color: blue;">“hai”</span>, <span class="string" style="color: blue;">“han”</span>, <span class="string" style="color: blue;">“hang”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“hao”</span>, <span class="string" style="color: blue;">“he”</span>, <span class="string" style="color: blue;">“hei”</span>, <span class="string" style="color: blue;">“hen”</span>, <span class="string" style="color: blue;">“heng”</span>, <span class="string" style="color: blue;">“hong”</span>, <span class="string" style="color: blue;">“hou”</span>, <span class="string" style="color: blue;">“hu”</span>, <span class="string" style="color: blue;">“hua”</span>, <span class="string" style="color: blue;">“huai”</span>, <span class="string" style="color: blue;">“huan”</span>, <span class="string" style="color: blue;">“huang”</span>, <span class="string" style="color: blue;">“hui”</span>, <span class="string" style="color: blue;">“hun”</span>, <span class="string" style="color: blue;">“huo”</span>, <span class="string" style="color: blue;">“ji”</span>, <span class="string" style="color: blue;">“jia”</span>, <span class="string" style="color: blue;">“jian”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“jiang”</span>, <span class="string" style="color: blue;">“jiao”</span>, <span class="string" style="color: blue;">“jie”</span>, <span class="string" style="color: blue;">“jin”</span>, <span class="string" style="color: blue;">“jing”</span>, <span class="string" style="color: blue;">“jiong”</span>, <span class="string" style="color: blue;">“jiu”</span>, <span class="string" style="color: blue;">“ju”</span>, <span class="string" style="color: blue;">“juan”</span>, <span class="string" style="color: blue;">“jue”</span>, <span class="string" style="color: blue;">“jun”</span>, <span class="string" style="color: blue;">“ka”</span>, <span class="string" style="color: blue;">“kai”</span>, <span class="string" style="color: blue;">“kan”</span>, <span class="string" style="color: blue;">“kang”</span>, <span class="string" style="color: blue;">“kao”</span>, <span class="string" style="color: blue;">“ke”</span>, <span class="string" style="color: blue;">“ken”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“keng”</span>, <span class="string" style="color: blue;">“kong”</span>, <span class="string" style="color: blue;">“kou”</span>, <span class="string" style="color: blue;">“ku”</span>, <span class="string" style="color: blue;">“kua”</span>, <span class="string" style="color: blue;">“kuai”</span>, <span class="string" style="color: blue;">“kuan”</span>, <span class="string" style="color: blue;">“kuang”</span>, <span class="string" style="color: blue;">“kui”</span>, <span class="string" style="color: blue;">“kun”</span>, <span class="string" style="color: blue;">“kuo”</span>, <span class="string" style="color: blue;">“la”</span>, <span class="string" style="color: blue;">“lai”</span>, <span class="string" style="color: blue;">“lan”</span>, <span class="string" style="color: blue;">“lang”</span>, <span class="string" style="color: blue;">“lao”</span>, <span class="string" style="color: blue;">“le”</span>, <span class="string" style="color: blue;">“lei”</span>, <span class="string" style="color: blue;">“leng”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“li”</span>, <span class="string" style="color: blue;">“lia”</span>, <span class="string" style="color: blue;">“lian”</span>, <span class="string" style="color: blue;">“liang”</span>, <span class="string" style="color: blue;">“liao”</span>, <span class="string" style="color: blue;">“lie”</span>, <span class="string" style="color: blue;">“lin”</span>, <span class="string" style="color: blue;">“ling”</span>, <span class="string" style="color: blue;">“liu”</span>, <span class="string" style="color: blue;">“long”</span>, <span class="string" style="color: blue;">“lou”</span>, <span class="string" style="color: blue;">“lu”</span>, <span class="string" style="color: blue;">“lv”</span>, <span class="string" style="color: blue;">“luan”</span>, <span class="string" style="color: blue;">“lue”</span>, <span class="string" style="color: blue;">“lun”</span>, <span class="string" style="color: blue;">“luo”</span>, <span class="string" style="color: blue;">“ma”</span>, <span class="string" style="color: blue;">“mai”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“man”</span>, <span class="string" style="color: blue;">“mang”</span>, <span class="string" style="color: blue;">“mao”</span>, <span class="string" style="color: blue;">“me”</span>, <span class="string" style="color: blue;">“mei”</span>, <span class="string" style="color: blue;">“men”</span>, <span class="string" style="color: blue;">“meng”</span>, <span class="string" style="color: blue;">“mi”</span>, <span class="string" style="color: blue;">“mian”</span>, <span class="string" style="color: blue;">“miao”</span>, <span class="string" style="color: blue;">“mie”</span>, <span class="string" style="color: blue;">“min”</span>, <span class="string" style="color: blue;">“ming”</span>, <span class="string" style="color: blue;">“miu”</span>, <span class="string" style="color: blue;">“mo”</span>, <span class="string" style="color: blue;">“mou”</span>, <span class="string" style="color: blue;">“mu”</span>, <span class="string" style="color: blue;">“na”</span>, <span class="string" style="color: blue;">“nai”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“nan”</span>, <span class="string" style="color: blue;">“nang”</span>, <span class="string" style="color: blue;">“nao”</span>, <span class="string" style="color: blue;">“ne”</span>, <span class="string" style="color: blue;">“nei”</span>, <span class="string" style="color: blue;">“nen”</span>, <span class="string" style="color: blue;">“neng”</span>, <span class="string" style="color: blue;">“ni”</span>, <span class="string" style="color: blue;">“nian”</span>, <span class="string" style="color: blue;">“niang”</span>, <span class="string" style="color: blue;">“niao”</span>, <span class="string" style="color: blue;">“nie”</span>, <span class="string" style="color: blue;">“nin”</span>, <span class="string" style="color: blue;">“ning”</span>, <span class="string" style="color: blue;">“niu”</span>, <span class="string" style="color: blue;">“nong”</span>, <span class="string" style="color: blue;">“nu”</span>, <span class="string" style="color: blue;">“nv”</span>, <span class="string" style="color: blue;">“nuan”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“nue”</span>, <span class="string" style="color: blue;">“nuo”</span>, <span class="string" style="color: blue;">“o”</span>, <span class="string" style="color: blue;">“ou”</span>, <span class="string" style="color: blue;">“pa”</span>, <span class="string" style="color: blue;">“pai”</span>, <span class="string" style="color: blue;">“pan”</span>, <span class="string" style="color: blue;">“pang”</span>, <span class="string" style="color: blue;">“pao”</span>, <span class="string" style="color: blue;">“pei”</span>, <span class="string" style="color: blue;">“pen”</span>, <span class="string" style="color: blue;">“peng”</span>, <span class="string" style="color: blue;">“pi”</span>, <span class="string" style="color: blue;">“pian”</span>, <span class="string" style="color: blue;">“piao”</span>, <span class="string" style="color: blue;">“pie”</span>, <span class="string" style="color: blue;">“pin”</span>, <span class="string" style="color: blue;">“ping”</span>, <span class="string" style="color: blue;">“po”</span>, <span class="string" style="color: blue;">“pu”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“qi”</span>, <span class="string" style="color: blue;">“qia”</span>, <span class="string" style="color: blue;">“qian”</span>, <span class="string" style="color: blue;">“qiang”</span>, <span class="string" style="color: blue;">“qiao”</span>, <span class="string" style="color: blue;">“qie”</span>, <span class="string" style="color: blue;">“qin”</span>, <span class="string" style="color: blue;">“qing”</span>, <span class="string" style="color: blue;">“qiong”</span>, <span class="string" style="color: blue;">“qiu”</span>, <span class="string" style="color: blue;">“qu”</span>, <span class="string" style="color: blue;">“quan”</span>, <span class="string" style="color: blue;">“que”</span>, <span class="string" style="color: blue;">“qun”</span>, <span class="string" style="color: blue;">“ran”</span>, <span class="string" style="color: blue;">“rang”</span>, <span class="string" style="color: blue;">“rao”</span>, <span class="string" style="color: blue;">“re”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“ren”</span>, <span class="string" style="color: blue;">“reng”</span>, <span class="string" style="color: blue;">“ri”</span>, <span class="string" style="color: blue;">“rong”</span>, <span class="string" style="color: blue;">“rou”</span>, <span class="string" style="color: blue;">“ru”</span>, <span class="string" style="color: blue;">“ruan”</span>, <span class="string" style="color: blue;">“rui”</span>, <span class="string" style="color: blue;">“run”</span>, <span class="string" style="color: blue;">“ruo”</span>, <span class="string" style="color: blue;">“sa”</span>, <span class="string" style="color: blue;">“sai”</span>, <span class="string" style="color: blue;">“san”</span>, <span class="string" style="color: blue;">“sang”</span>, <span class="string" style="color: blue;">“sao”</span>, <span class="string" style="color: blue;">“se”</span>, <span class="string" style="color: blue;">“sen”</span>, <span class="string" style="color: blue;">“seng”</span>, <span class="string" style="color: blue;">“sha”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“shai”</span>, <span class="string" style="color: blue;">“shan”</span>, <span class="string" style="color: blue;">“shang”</span>, <span class="string" style="color: blue;">“shao”</span>, <span class="string" style="color: blue;">“she”</span>, <span class="string" style="color: blue;">“shen”</span>, <span class="string" style="color: blue;">“sheng”</span>, <span class="string" style="color: blue;">“shi”</span>, <span class="string" style="color: blue;">“shou”</span>, <span class="string" style="color: blue;">“shu”</span>, <span class="string" style="color: blue;">“shua”</span>, <span class="string" style="color: blue;">“shuai”</span>, <span class="string" style="color: blue;">“shuan”</span>, <span class="string" style="color: blue;">“shuang”</span>, <span class="string" style="color: blue;">“shui”</span>, <span class="string" style="color: blue;">“shun”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“shuo”</span>, <span class="string" style="color: blue;">“si”</span>, <span class="string" style="color: blue;">“song”</span>, <span class="string" style="color: blue;">“sou”</span>, <span class="string" style="color: blue;">“su”</span>, <span class="string" style="color: blue;">“suan”</span>, <span class="string" style="color: blue;">“sui”</span>, <span class="string" style="color: blue;">“sun”</span>, <span class="string" style="color: blue;">“suo”</span>, <span class="string" style="color: blue;">“ta”</span>, <span class="string" style="color: blue;">“tai”</span>, <span class="string" style="color: blue;">“tan”</span>, <span class="string" style="color: blue;">“tang”</span>, <span class="string" style="color: blue;">“tao”</span>, <span class="string" style="color: blue;">“te”</span>, <span class="string" style="color: blue;">“teng”</span>, <span class="string" style="color: blue;">“ti”</span>, <span class="string" style="color: blue;">“tian”</span>, <span class="string" style="color: blue;">“tiao”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“tie”</span>, <span class="string" style="color: blue;">“ting”</span>, <span class="string" style="color: blue;">“tong”</span>, <span class="string" style="color: blue;">“tou”</span>, <span class="string" style="color: blue;">“tu”</span>, <span class="string" style="color: blue;">“tuan”</span>, <span class="string" style="color: blue;">“tui”</span>, <span class="string" style="color: blue;">“tun”</span>, <span class="string" style="color: blue;">“tuo”</span>, <span class="string" style="color: blue;">“wa”</span>, <span class="string" style="color: blue;">“wai”</span>, <span class="string" style="color: blue;">“wan”</span>, <span class="string" style="color: blue;">“wang”</span>, <span class="string" style="color: blue;">“wei”</span>, <span class="string" style="color: blue;">“wen”</span>, <span class="string" style="color: blue;">“weng”</span>, <span class="string" style="color: blue;">“wo”</span>, <span class="string" style="color: blue;">“wu”</span>, <span class="string" style="color: blue;">“xi”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“xia”</span>, <span class="string" style="color: blue;">“xian”</span>, <span class="string" style="color: blue;">“xiang”</span>, <span class="string" style="color: blue;">“xiao”</span>, <span class="string" style="color: blue;">“xie”</span>, <span class="string" style="color: blue;">“xin”</span>, <span class="string" style="color: blue;">“xing”</span>, <span class="string" style="color: blue;">“xiong”</span>, <span class="string" style="color: blue;">“xiu”</span>, <span class="string" style="color: blue;">“xu”</span>, <span class="string" style="color: blue;">“xuan”</span>, <span class="string" style="color: blue;">“xue”</span>, <span class="string" style="color: blue;">“xun”</span>, <span class="string" style="color: blue;">“ya”</span>, <span class="string" style="color: blue;">“yan”</span>, <span class="string" style="color: blue;">“yang”</span>, <span class="string" style="color: blue;">“yao”</span>, <span class="string" style="color: blue;">“ye”</span>, <span class="string" style="color: blue;">“yi”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“yin”</span>, <span class="string" style="color: blue;">“ying”</span>, <span class="string" style="color: blue;">“yo”</span>, <span class="string" style="color: blue;">“yong”</span>, <span class="string" style="color: blue;">“you”</span>, <span class="string" style="color: blue;">“yu”</span>, <span class="string" style="color: blue;">“yuan”</span>, <span class="string" style="color: blue;">“yue”</span>, <span class="string" style="color: blue;">“yun”</span>, <span class="string" style="color: blue;">“za”</span>, <span class="string" style="color: blue;">“zai”</span>, <span class="string" style="color: blue;">“zan”</span>, <span class="string" style="color: blue;">“zang”</span>, <span class="string" style="color: blue;">“zao”</span>, <span class="string" style="color: blue;">“ze”</span>, <span class="string" style="color: blue;">“zei”</span>, <span class="string" style="color: blue;">“zen”</span>, <span class="string" style="color: blue;">“zeng”</span>, <span class="string" style="color: blue;">“zha”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“zhai”</span>, <span class="string" style="color: blue;">“zhan”</span>, <span class="string" style="color: blue;">“zhang”</span>, <span class="string" style="color: blue;">“zhao”</span>, <span class="string" style="color: blue;">“zhe”</span>, <span class="string" style="color: blue;">“zhen”</span>, <span class="string" style="color: blue;">“zheng”</span>, <span class="string" style="color: blue;">“zhi”</span>, <span class="string" style="color: blue;">“zhong”</span>, <span class="string" style="color: blue;">“zhou”</span>, <span class="string" style="color: blue;">“zhu”</span>, <span class="string" style="color: blue;">“zhua”</span>, <span class="string" style="color: blue;">“zhuai”</span>, <span class="string" style="color: blue;">“zhuan”</span>, <span class="string" style="color: blue;">“zhuang”</span>, <span class="string" style="color: blue;">“zhui”</span>, </span>
- <span style="color: black;"> <span class="string" style="color: blue;">“zhun”</span>, <span class="string" style="color: blue;">“zhuo”</span>, <span class="string" style="color: blue;">“zi”</span>, <span class="string" style="color: blue;">“zong”</span>, <span class="string" style="color: blue;">“zou”</span>, <span class="string" style="color: blue;">“zu”</span>, <span class="string" style="color: blue;">“zuan”</span>, <span class="string" style="color: blue;">“zui”</span>, <span class="string" style="color: blue;">“zun”</span>, <span class="string" style="color: blue;">“zuo”</span>}; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> StringBuilder buffer; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> String resource; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> <span class="keyword" style="font-weight: bold; color: #006699;">static</span> CharacterParser characterParser = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> CharacterParser(); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">static</span> CharacterParser getInstance() { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> characterParser; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> String getResource() { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> resource; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> setResource(String resource) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">this</span>.resource = resource; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/** * 汉字转成ASCII码 * * @param chs * @return */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> getChsAscii(String chs) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> asc = <span class="number" style="color: #c00000;"></span>; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">try</span> { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">byte</span>[] bytes = chs.getBytes(<span class="string" style="color: blue;">“gb2312”</span>); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (bytes == <span class="keyword" style="font-weight: bold; color: #006699;">null</span> || bytes.length > <span class="number" style="color: #c00000;">2</span> || bytes.length <= <span class="number" style="color: #c00000;"></span>) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">throw</span> <span class="keyword" style="font-weight: bold; color: #006699;">new</span> RuntimeException(<span class="string" style="color: blue;">“illegal resource string”</span>); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (bytes.length == <span class="number" style="color: #c00000;">1</span>) { </span>
- <span style="color: black;"> asc = bytes[<span class="number" style="color: #c00000;"></span>]; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (bytes.length == <span class="number" style="color: #c00000;">2</span>) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> hightByte = <span class="number" style="color: #c00000;">256</span> + bytes[<span class="number" style="color: #c00000;"></span>]; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> lowByte = <span class="number" style="color: #c00000;">256</span> + bytes[<span class="number" style="color: #c00000;">1</span>]; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> } <span class="keyword" style="font-weight: bold; color: #006699;">catch</span> (Exception e) { </span>
- <span style="color: black;"> System.out.println(<span class="string" style="color: blue;">“ERROR:ChineseSpelling.class-getChsAscii(String chs)”</span> + e); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> asc; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/** * 单字解析 * * @param str * @return */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> String convert(String str) { </span>
- <span style="color: black;"> String result = <span class="keyword" style="font-weight: bold; color: #006699;">null</span>; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> ascii = getChsAscii(str); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (ascii > <span class="number" style="color: #c00000;"></span> && ascii < <span class="number" style="color: #c00000;">160</span>) { </span>
- <span style="color: black;"> result = String.valueOf((<span class="keyword" style="font-weight: bold; color: #006699;">char</span>) ascii); </span>
- <span style="color: black;"> } <span class="keyword" style="font-weight: bold; color: #006699;">else</span> { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (pyvalue[i] <= ascii) { </span>
- <span style="color: black;"> result = pystr[i]; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">break</span>; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> result; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/** * 词组解析 * * @param chs * @return */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> String getSelling(String chs) { </span>
- <span style="color: black;"> String key, value; </span>
- <span style="color: black;"> buffer = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> StringBuilder(); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">for</span> (<span class="keyword" style="font-weight: bold; color: #006699;">int</span> i = <span class="number" style="color: #c00000;"></span>; i < chs.length(); i++) { </span>
- <span style="color: black;"> key = chs.substring(i, i + <span class="number" style="color: #c00000;">1</span>); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (key.getBytes().length >= <span class="number" style="color: #c00000;">2</span>) { </span>
- <span style="color: black;"> value = (String) convert(key); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (value == <span class="keyword" style="font-weight: bold; color: #006699;">null</span>) { </span>
- <span style="color: black;"> value = <span class="string" style="color: blue;">“unknown”</span>; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> } <span class="keyword" style="font-weight: bold; color: #006699;">else</span> { </span>
- <span style="color: black;"> value = key; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> buffer.append(value); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> buffer.toString(); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> String getSpelling() { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> <span class="keyword" style="font-weight: bold; color: #006699;">this</span>.getSelling(<span class="keyword" style="font-weight: bold; color: #006699;">this</span>.getResource()); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;">} </span>
</div>
4.ClearEditText类是自定义的一个在右侧有删除图片的EditText,当然你也可以用Android原生的EditText,该类我之前有介绍,我这里就不贴上代码了[Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框](http://blog.csdn.net/xiaanming/article/details/11066685)
5.SortAdapter 数据的适配器类,该类需要实现SectionIndexer接口,该接口是用来控制ListView分组的,该接口有三个方法getSectionForPosition(int position),getPositionForSection(int section),getSections(),我们只需要自行实现前面两个方法
- getSectionForPosition(int position)是根据ListView的position来获取该位置上面的name的首字母char的ascii值,例如: 如果该position上面的name是阿妹,首字母就是A,那么此方法返回的就是’A’字母的ascii值,也就是65, ‘B’是66,依次类推
- getPositionForSection(int section)就是根据首字母的ascii值来获取在该ListView中第一次出现该首字母的位置,例如:从上面的效果图1中,如果section是66 ,也就是‘B’的ascii值,那么该方法返回的position就是2
然后就是getView()方法,首先我们根据ListView的position调用getSectionForPosition(int position)来获取该位置上面name的首字母的ascii值,然后根据这个ascii值调用getPositionForSection(int section)来获取第一次出现该首字母的position,如果ListView的position 等于 根据这个ascii值调用getPositionForSection(int section)来获取第一次出现该首字母的position,则显示分类字母 否则隐藏
<div class="dp-highlighter bg_java" style="color: #000000;">
<div class="bar">
<div class="tools" style="color: silver;">
**[java]** [view plain](http://blog.csdn.net/xiaanming/article/details/12684155#)[copy](http://blog.csdn.net/xiaanming/article/details/12684155#)[](https://code.csdn.net/snippets/111689)[](https://code.csdn.net/snippets/111689/fork)
<div>
</div>
</div>
</div>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">package</span> com.example.sortlistview; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> java.util.List; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.content.Context; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.view.LayoutInflater; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.view.View; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.view.ViewGroup; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.widget.BaseAdapter; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.widget.SectionIndexer; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.widget.TextView; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">class</span> SortAdapter <span class="keyword" style="font-weight: bold; color: #006699;">extends</span> BaseAdapter <span class="keyword" style="font-weight: bold; color: #006699;">implements</span> SectionIndexer{ </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> List<SortModel> list = <span class="keyword" style="font-weight: bold; color: #006699;">null</span>; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> Context mContext; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> SortAdapter(Context mContext, List<SortModel> list) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">this</span>.mContext = mContext; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">this</span>.list = list; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * 当ListView数据发生变化时,调用此方法来更新ListView</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * @param list</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> updateListView(List<SortModel> list){ </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">this</span>.list = list; </span>
- <span style="color: black;"> notifyDataSetChanged(); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> getCount() { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> <span class="keyword" style="font-weight: bold; color: #006699;">this</span>.list.size(); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> Object getItem(<span class="keyword" style="font-weight: bold; color: #006699;">int</span> position) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> list.get(position); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">long</span> getItemId(<span class="keyword" style="font-weight: bold; color: #006699;">int</span> position) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> position; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> View getView(<span class="keyword" style="font-weight: bold; color: #006699;">final</span> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> position, View view, ViewGroup arg2) { </span>
- <span style="color: black;"> ViewHolder viewHolder = <span class="keyword" style="font-weight: bold; color: #006699;">null</span>; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">final</span> SortModel mContent = list.get(position); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (view == <span class="keyword" style="font-weight: bold; color: #006699;">null</span>) { </span>
- <span style="color: black;"> viewHolder = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> ViewHolder(); </span>
- <span style="color: black;"> view = LayoutInflater.from(mContext).inflate(R.layout.item, <span class="keyword" style="font-weight: bold; color: #006699;">null</span>); </span>
- <span style="color: black;"> viewHolder.tvTitle = (TextView) view.findViewById(R.id.title); </span>
- <span style="color: black;"> viewHolder.tvLetter = (TextView) view.findViewById(R.id.catalog); </span>
- <span style="color: black;"> view.setTag(viewHolder); </span>
- <span style="color: black;"> } <span class="keyword" style="font-weight: bold; color: #006699;">else</span> { </span>
- <span style="color: black;"> viewHolder = (ViewHolder) view.getTag(); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">//根据position获取分类的首字母的char ascii值</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> section = getSectionForPosition(position); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">//如果当前位置等于该分类首字母的Char的位置 ,则认为是第一次出现</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span>(position == getPositionForSection(section)){ </span>
- <span style="color: black;"> viewHolder.tvLetter.setVisibility(View.VISIBLE); </span>
- <span style="color: black;"> viewHolder.tvLetter.setText(mContent.getSortLetters()); </span>
- <span style="color: black;"> }<span class="keyword" style="font-weight: bold; color: #006699;">else</span>{ </span>
- <span style="color: black;"> viewHolder.tvLetter.setVisibility(View.GONE); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> viewHolder.tvTitle.setText(<span class="keyword" style="font-weight: bold; color: #006699;">this</span>.list.get(position).getName()); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> view; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">final</span> <span class="keyword" style="font-weight: bold; color: #006699;">static</span> <span class="keyword" style="font-weight: bold; color: #006699;">class</span> ViewHolder { </span>
- <span style="color: black;"> TextView tvLetter; </span>
- <span style="color: black;"> TextView tvTitle; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * 根据ListView的当前位置获取分类的首字母的char ascii值</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> getSectionForPosition(<span class="keyword" style="font-weight: bold; color: #006699;">int</span> position) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> list.get(position).getSortLetters().charAt(<span class="number" style="color: #c00000;"></span>); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * 根据分类的首字母的Char ascii值获取其第一次出现该首字母的位置</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> getPositionForSection(<span class="keyword" style="font-weight: bold; color: #006699;">int</span> section) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">for</span> (<span class="keyword" style="font-weight: bold; color: #006699;">int</span> i = <span class="number" style="color: #c00000;"></span>; i < getCount(); i++) { </span>
- <span style="color: black;"> String sortStr = list.get(i).getSortLetters(); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">char</span> firstChar = sortStr.toUpperCase().charAt(<span class="number" style="color: #c00000;"></span>); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (firstChar == section) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> i; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> Object[] getSections() { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> <span class="keyword" style="font-weight: bold; color: #006699;">null</span>; </span>
- <span style="color: black;"> } </span>
- <span style="color: black;">} </span>
</div>
**<span style="color: #000000;">6.MainActivity 这里面的代码比较简单,我们对ClearEditText设置addTextChangedListener监听,当输入框内容发生变化根据里面的值过滤ListView,里面的值为空显示原来的列表,里面对列表数据进行排序用到PinyinComparator接口,该接口主要是用来比较对象的</span>
<div class="dp-highlighter bg_java" style="color: #000000;">
<div class="bar">
<div class="tools" style="color: silver;">
<b>[java]** [view plain](http://blog.csdn.net/xiaanming/article/details/12684155#)[copy](http://blog.csdn.net/xiaanming/article/details/12684155#)[](https://code.csdn.net/snippets/111689)[](https://code.csdn.net/snippets/111689/fork)
<div>
</div>
</div>
</div>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">package</span> com.example.sortlistview; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> java.util.ArrayList; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> java.util.Collections; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> java.util.List; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.app.Activity; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.os.Bundle; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.text.Editable; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.text.TextUtils; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.text.TextWatcher; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.view.View; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.widget.AdapterView; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.widget.AdapterView.OnItemClickListener; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.widget.ListView; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.widget.TextView; </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> android.widget.Toast; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> com.example.sortlistview.SideBar.OnTouchingLetterChangedListener; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">class</span> MainActivity <span class="keyword" style="font-weight: bold; color: #006699;">extends</span> Activity { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> ListView sortListView; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> SideBar sideBar; </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * 显示字母的TextView</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> TextView dialog; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> SortAdapter adapter; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> ClearEditText mClearEditText; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * 汉字转换成拼音的类</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> CharacterParser characterParser; </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> List<SortModel> SourceDateList; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * 根据拼音来排列ListView里面的数据类</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> PinyinComparator pinyinComparator; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">protected</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> onCreate(Bundle savedInstanceState) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">super</span>.onCreate(savedInstanceState); </span>
- <span style="color: black;"> setContentView(R.layout.activity_main); </span>
- <span style="color: black;"> initViews(); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> initViews() { </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">//实例化汉字转拼音类</span> </span>
- <span style="color: black;"> characterParser = CharacterParser.getInstance(); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> pinyinComparator = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> PinyinComparator(); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> sideBar = (SideBar) findViewById(R.id.sidrbar); </span>
- <span style="color: black;"> dialog = (TextView) findViewById(R.id.dialog); </span>
- <span style="color: black;"> sideBar.setTextView(dialog); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">//设置右侧触摸监听</span> </span>
- <span style="color: black;"> sideBar.setOnTouchingLetterChangedListener(<span class="keyword" style="font-weight: bold; color: #006699;">new</span> OnTouchingLetterChangedListener() { </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> onTouchingLetterChanged(String s) { </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">//该字母首次出现的位置</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> position = adapter.getPositionForSection(s.charAt(<span class="number" style="color: #c00000;"></span>)); </span>
- <span style="color: black;"> sortListView.setSelection(position); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> }); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> sortListView = (ListView) findViewById(R.id.country_lvcountry); </span>
- <span style="color: black;"> sortListView.setOnItemClickListener(<span class="keyword" style="font-weight: bold; color: #006699;">new</span> OnItemClickListener() { </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> onItemClick(AdapterView<?> parent, View view, </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> position, <span class="keyword" style="font-weight: bold; color: #006699;">long</span> id) { </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">//这里要利用adapter.getItem(position)来获取当前position所对应的对象</span> </span>
- <span style="color: black;"> Toast.makeText(getApplication(), ((SortModel)adapter.getItem(position)).getName(), Toast.LENGTH_SHORT).show(); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> }); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> SourceDateList = filledData(getResources().getStringArray(R.array.date)); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">// 根据a-z进行排序源数据</span> </span>
- <span style="color: black;"> Collections.sort(SourceDateList, pinyinComparator); </span>
- <span style="color: black;"> adapter = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> SortAdapter(<span class="keyword" style="font-weight: bold; color: #006699;">this</span>, SourceDateList); </span>
- <span style="color: black;"> sortListView.setAdapter(adapter); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> mClearEditText = (ClearEditText) findViewById(R.id.filter_edit); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">//根据输入框输入值的改变来过滤搜索</span> </span>
- <span style="color: black;"> mClearEditText.addTextChangedListener(<span class="keyword" style="font-weight: bold; color: #006699;">new</span> TextWatcher() { </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> onTextChanged(CharSequence s, <span class="keyword" style="font-weight: bold; color: #006699;">int</span> start, <span class="keyword" style="font-weight: bold; color: #006699;">int</span> before, <span class="keyword" style="font-weight: bold; color: #006699;">int</span> count) { </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">//当输入框里面的值为空,更新为原来的列表,否则为过滤数据列表</span> </span>
- <span style="color: black;"> filterData(s.toString()); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> beforeTextChanged(CharSequence s, <span class="keyword" style="font-weight: bold; color: #006699;">int</span> start, <span class="keyword" style="font-weight: bold; color: #006699;">int</span> count, </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> after) { </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="annotation" style="color: #646464;">@Override</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> afterTextChanged(Editable s) { </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> }); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * 为ListView填充数据</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * @param date</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * @return</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> List<SortModel> filledData(String [] date){ </span>
- <span style="color: black;"> List<SortModel> mSortList = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> ArrayList<SortModel>(); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">for</span>(<span class="keyword" style="font-weight: bold; color: #006699;">int</span> i=<span class="number" style="color: #c00000;"></span>; i<date.length; i++){ </span>
- <span style="color: black;"> SortModel sortModel = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> SortModel(); </span>
- <span style="color: black;"> sortModel.setName(date[i]); </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">//汉字转换成拼音</span> </span>
- <span style="color: black;"> String pinyin = characterParser.getSelling(date[i]); </span>
- <span style="color: black;"> String sortString = pinyin.substring(<span class="number" style="color: #c00000;"></span>, <span class="number" style="color: #c00000;">1</span>).toUpperCase(); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">// 正则表达式,判断首字母是否是英文字母</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span>(sortString.matches(<span class="string" style="color: blue;">“[A-Z]”</span>)){ </span>
- <span style="color: black;"> sortModel.setSortLetters(sortString.toUpperCase()); </span>
- <span style="color: black;"> }<span class="keyword" style="font-weight: bold; color: #006699;">else</span>{ </span>
- <span style="color: black;"> sortModel.setSortLetters(<span class="string" style="color: blue;">“#”</span>); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> mSortList.add(sortModel); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> mSortList; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * 根据输入框中的值来过滤数据并更新ListView</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * @param filterStr</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">private</span> <span class="keyword" style="font-weight: bold; color: #006699;">void</span> filterData(String filterStr) { </span>
- <span style="color: black;"> List<SortModel> filterDateList = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> ArrayList<SortModel>(); </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (TextUtils.isEmpty(filterStr)) { </span>
- <span style="color: black;"> filterDateList = SourceDateList; </span>
- <span style="color: black;"> } <span class="keyword" style="font-weight: bold; color: #006699;">else</span> { </span>
- <span style="color: black;"> filterDateList.clear(); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">for</span> (SortModel sortModel : SourceDateList) { </span>
- <span style="color: black;"> String name = sortModel.getName(); </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (name.toUpperCase().indexOf( </span>
- <span style="color: black;"> || characterParser.getSelling(name).toUpperCase() </span>
- <span style="color: black;"> .startsWith(filterStr.toString().toUpperCase())) { </span>
- <span style="color: black;"> filterDateList.add(sortModel); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">// 根据a-z进行排序</span> </span>
- <span style="color: black;"> Collections.sort(filterDateList, pinyinComparator); </span>
- <span style="color: black;"> adapter.updateListView(filterDateList); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> </span>
- <span style="color: black;">} </span>
</div>
7.PinyinComparator接口用来对ListView中的数据根据A-Z进行排序,前面两个if判断主要是将不是以汉字开头的数据放在后面
<div class="dp-highlighter bg_java" style="color: #000000;">
<div class="bar">
<div class="tools" style="color: silver;">
**[java]** [view plain](http://blog.csdn.net/xiaanming/article/details/12684155#)[copy](http://blog.csdn.net/xiaanming/article/details/12684155#)[](https://code.csdn.net/snippets/111689)[](https://code.csdn.net/snippets/111689/fork)
<div>
</div>
</div>
</div>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">package</span> com.example.sortlistview; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">import</span> java.util.Comparator; </span>
- <span style="color: black;"> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;">/**</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * </span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> * @author xiaanming</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> *</span> </span>
- <span style="color: black;"><span class="comment" style="color: #008200;"> */</span> </span>
- <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">class</span> PinyinComparator <span class="keyword" style="font-weight: bold; color: #006699;">implements</span> Comparator<SortModel> { </span>
- <span style="color: black;"> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">public</span> <span class="keyword" style="font-weight: bold; color: #006699;">int</span> compare(SortModel o1, SortModel o2) { </span>
- <span style="color: black;"> <span class="comment" style="color: #008200;">//这里主要是用来对ListView里面的数据根据ABCDEFG…来排序</span> </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (o2.getSortLetters().equals(<span class="string" style="color: blue;">“#”</span>)) { </span>
- <span style="color: black;"> } <span class="keyword" style="font-weight: bold; color: #006699;">else</span> <span class="keyword" style="font-weight: bold; color: #006699;">if</span> (o1.getSortLetters().equals(<span class="string" style="color: blue;">“#”</span>)) { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> <span class="number" style="color: #c00000;">1</span>; </span>
- <span style="color: black;"> } <span class="keyword" style="font-weight: bold; color: #006699;">else</span> { </span>
- <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> o1.getSortLetters().compareTo(o2.getSortLetters()); </span>
- <span style="color: black;"> } </span>
- <span style="color: black;"> } </span>
- <span style="color: black;">} </span>
</div>
这样我们以后使用A-Z排序就没要局限性了,想加这个效果随时都行,其他的布局和图片之类的文件就不贴出来了,如果大家有兴趣的自行去下载代码吧,如果大家有什么疑问,请在下面留言,我会为大家解答的!
[项目源码,点击下载](http://download.csdn.net/detail/xiaanming/6394377)
github地址:https://github.com/xiaanming/A-Z-SortListView
💬 评论