1. Main. xml
<? XML version = "1.0" encoding = "UTF-8"?> <Br/> <relativelayout <br/> xmns: Android = "http://schemas.android.com/apk/res/android" <br/> Android: layout_width = "fill_parent" <br/> Android: layout_height = "fill_parent"> <br/> <listview Android: Id = "@ + ID/mylistview" <br/> Android: layout_width = "fill_parent" <br/> Android: layout_height = "fill_parent" <br/> <android. test. sidebar <br/> Android: Id = "@ + ID/sidebar" <br/> Android: layout_height = "fill_parent" <br/> Android: layout_width = "22px" <br/> Android: layout_alignparentright = "true" <br/> </relativelayout>
2. listview_row.xml
<? XML version = "1.0" encoding = "UTF-8"?> <Br/> <linearlayout <br/> xmns: Android = "http://schemas.android.com/apk/res/android" <br/> Android: Orientation = "vertical" <br/> Android: layout_width = "fill_parent" <br/> Android: layout_height = "wrap_content"> <br/> <linearlayout <br/> Android: id = "@ + ID/section" <br/> Android: layout_width = "fill_parent" <br/> Android: layout_height = "wrap_content" <br/> <textview Android: Id = "@ + ID/textview" <br/> Android: layout_width = "wrap_content" <br/> Android: layout_height = "80sp" <br/> Android: textsize = "45sp" <br/> </linearlayout>
3. myadapter. Java
Package android. test; <br/> Import Java. util. arraylist; <br/> Import android. app. activity; <br/> Import android. content. context; <br/> Import android. graphics. color; <br/> Import android. view. gravity; <br/> Import android. view. layoutinflater; <br/> Import android. view. view; <br/> Import android. view. viewgroup; <br/> Import android. widget. baseadapter; <br/> Import android. widget. linearlayout; <br/> Import android Oid. widget. sectionindexer; <br/> Import android. widget. textview; <br/> public class myadapter extends baseadapter implements sectionindexer {<br/> private arraylist <string> stringarray; <br/> private context; <br/> Public myadapter (context _ context, arraylist <string> ARR) {<br/> stringarray = arr; <br/> context = _ context; <br/>}< br/> Public int getcount () {<br/> return stringarray. size (); <br/ >}< Br/> Public object getitem (INT arg0) {<br/> return stringarray. get (arg0); <br/>}< br/> Public long getitemid (INT arg0) {<br/> return 0; <br/>}< br/> Public View getview (INT position, view V, viewgroup parent) {<br/> layoutinflater inflate = (activity) context ). getlayoutinflater (); <br/> View view = (View) inflate. inflate (R. layout. listview_row, null); <br/> linearlayout header = (linearlayout) view. Findviewbyid (R. id. section); <br/> string label = stringarray. get (position); <br/> char firstchar = label. touppercase (). charat (0); <br/> If (position = 0) {<br/> setsection (header, label ); <br/>} else {<br/> string prelabel = stringarray. get (position-1); <br/> char prefirstchar = prelabel. touppercase (). charat (0); <br/> If (firstchar! = Prefirstchar) {<br/> setsection (header, label); <br/>}else {<br/> header. setvisibility (view. gone); <br/>}< br/> textview = (textview) view. findviewbyid (R. id. textview); <br/> textview. settext (Label); <br/> return view; <br/>}< br/> private void setsection (linearlayout header, string label) {<br/> textview text = new textview (context); <br/> header. setbackgroundcolor (0 xffaabbcc); <br/> text. settextcolor (color. white); <br/> text. settext (label. substring (0, 1 ). touppercase (); <br/> text. settextsize (20); <br/> text. setpadding (5, 0, 0, 0); <br/> text. setgravity (gravity. center_vertical); <br/> header. addview (text); <br/>}< br/> Public int getpositionforsection (INT section) {<br/> If (Section = 35) {<br/> return 0; <br/>}< br/> for (INT I = 0; I <stringarray. size (); I ++) {<br/> string L = stringarray. get (I); <br/> char firstchar = L. touppercase (). charat (0); <br/> If (firstchar = Section) {<br/> return I; <br/>}< br/> return-1; <br/>}< br/> Public int getsectionforposition (INT arg0) {<br/> return 0; <br/>}< br/> Public object [] getsections () {<br/> return NULL; <br/>}< br/>}
4. Sidebar. Java
Package android. test; <br/> Import android. content. context; <br/> Import android. graphics. canvas; <br/> Import android. graphics. paint; <br/> Import android. util. attributeset; <br/> Import android. view. motionevent; <br/> Import android. view. view; <br/> Import android. widget. listview; <br/> Import android. widget. sectionindexer; <br/> public class sidebar extends view {<br/> private char [] l; <br/> private sectionindexer sectionindexter = NULL; <br/> private listview list; <br/> private final int m_nitemheight = 29; <br/> Public sidebar (context) {<br/> super (context); <br/> Init (); <br/>}< br/> Public sidebar (context, attributeset attrs) {<br/> super (context, attrs); <br/> Init (); <br/>}< br/> private void Init () {<br/> L = new char [] {'A', 'B', 'C ', 'D', 'E', 'F', 'G', 'h', 'I', 'J', 'k', 'l', 'M ', 'N', 'O', 'P', 'Q', 'R', 's', <br/> 'T', 'U', 'V ', 'w', 'x', 'y', 'z'}; <br/> setbackgroundcolor (0x44ffffff ); <br/>}< br/> Public sidebar (context, attributeset attrs, int defstyle) {<br/> super (context, attrs, defstyle ); <br/> Init (); <br/>}< br/> Public void setlistview (listview _ list) {<br/> List = _ list; <br/> sectionindexter = (sectionindexer) _ list. getadapter (); <br/>}< br/> Public Boolean ontouchevent (motionevent event) {<br/> super. ontouchevent (event); <br/> int I = (INT) event. gety (); <br/> int idx = I/m_nitemheight; <br/> If (idx> = L. length) {<br/> idx = L. length-1; <br/>}else if (idx <0) {<br/> idx = 0; <br/>}< br/> If (event. getaction () = motionevent. action_down | event. getaction () = motionevent. action_move) {<br/> If (sectionindexter = NULL) {<br/> sectionindexter = (sectionindexer) list. getadapter (); <br/>}< br/> int position = sectionindexter. getpositionforsection (L [idx]); <br/> If (position =-1) {<br/> return true; <br/>}< br/> list. setselection (position); <br/>}< br/> return true; <br/>}< br/> protected void ondraw (canvas) {<br/> paint = new paint (); <br/> paint. setcolor (0xffa6a9aa); <br/> paint. settextsize (20); <br/> paint. settextalign (paint. align. center); <br/> float widthcenter = getmeasuredwidth ()/2; <br/> for (INT I = 0; I <L. length; I ++) {<br/> canvas. drawtext (string. valueof (L [I]), widthcenter, m_nitemheight + (I * m_nitemheight), paint); <br/>}< br/> super. ondraw (canvas); <br/>}< br/>}
5. Main. Java
Package android. test; <br/> Import Java. util. arraylist; <br/> Import android. app. activity; <br/> Import android. OS. bundle; <br/> Import android. widget. listview; <br/> public class main extends activity {<br/>/** called when the activity is first created. */<br/> @ override <br/> Public void oncreate (bundle savedinstancestate) {<br/> super. oncreate (savedinstancestate); <br/> setcontentview (R. layout. main); <br/> listview list = (listview) findviewbyid (R. id. mylistview); <br/> arraylist <string> stringlist = initlistviewdata (); <br/> myadapter adapter = new myadapter (this, stringlist); <br/> list. setadapter (adapter); <br/> sidebar indexbar = (sidebar) findviewbyid (R. id. sidebar); <br/> indexbar. setlistview (list); <br/>}< br/> private arraylist <string> initlistviewdata () {<br/> arraylist <string> stringlist = new arraylist <string> (); <br/> stringlist. add ("aback"); <br/> stringlist. add ("abash"); <br/> stringlist. add ("Abbey"); <br/> stringlist. add ("abhor"); <br/> stringlist. add ("abide"); <br/> stringlist. add ("Abuse"); <br/> stringlist. add ("candidate"); <br/> stringlist. add ("capture"); <br/> stringlist. add ("careful"); <br/> stringlist. add ("catch"); <br/> stringlist. add ("cause"); <br/> stringlist. add ("celebrate"); <br/> stringlist. add ("forever"); <br/> stringlist. add ("fable"); <br/> stringlist. add ("Fidelity"); <br/> stringlist. add ("Fox"); <br/> stringlist. add ("funny"); <br/> stringlist. add ("fail"); <br/> stringlist. add ("jail"); <br/> stringlist. add ("Jade"); <br/> stringlist. add ("jailor"); <br/> stringlist. add ("January"); <br/> stringlist. add ("Jasmine"); <br/> stringlist. add ("Jazz"); <br/> stringlist. add ("zero"); <br/> stringlist. add ("Zoo"); <br/> stringlist. add ("Zeus"); <br/> stringlist. add ("ZEBRA"); <br/> stringlist. add ("Zest"); <br/> stringlist. add ("zing"); <br/> return stringlist; <br/>}< br/>}