首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

SectionIndexer 的施用(联系人分类索引)

2012-06-26 
SectionIndexer 的使用(联系人分类索引)?// 获取标题栏索引int?position??sectionIndexter.getPositionFo

SectionIndexer 的使用(联系人分类索引)

?

  1. // 获取标题栏索引
  2. int?position?=?sectionIndexter.getPositionForSection(l[idx]);??
  3. ????????????if?(position?==?-1)?{??
  4. ????????????????return?true;??
  5. ????????????}??
  6. ? ? // 设置调整到指定区域
  7. ????????????list.setSelection(position);?

?

1. Main.xml

?

  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <RelativeLayout??
  • ????xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????android:layout_width="fill_parent"??
  • ????android:layout_height="fill_parent">??
  • <ListView?android:id="@+id/myListView"??
  • ????android:layout_width="fill_parent"??
  • ????android:layout_height="fill_parent"??
  • />??
  • <android.test.SideBar??
  • ????android:id?=?"@+id/sideBar"??
  • ????android:layout_height="fill_parent"??
  • ????android:layout_width="22px"??
  • ????android:layout_alignParentRight="true"??
  • />??
  • </RelativeLayout>??

    ?

    ?

    ?

    2. listview_row.xml

    ?

  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <LinearLayout??
  • ????xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????android:orientation="vertical"??
  • ????android:layout_width="fill_parent"??
  • ????android:layout_height="wrap_content">??
  • <LinearLayout??
  • ????android:id="@+id/section"??
  • ????android:layout_width="fill_parent"??
  • ????android:layout_height="wrap_content"??
  • />??
  • <TextView?android:id="@+id/textView"??
  • ????android:layout_width="wrap_content"??
  • ????android:layout_height="80sp"??
  • ????android:textSize="45sp"??
  • />??
  • </LinearLayout>??

    ?

    ?

    ?

    3. MyAdapter.java

    ?

  • package?android.test;??
  • import?java.util.ArrayList;??
  • import?android.app.Activity;??
  • import?android.content.Context;??
  • import?android.graphics.Color;??
  • import?android.view.Gravity;??
  • import?android.view.LayoutInflater;??
  • import?android.view.View;??
  • import?android.view.ViewGroup;??
  • import?android.widget.BaseAdapter;??
  • import?android.widget.LinearLayout;??
  • import?android.widget.SectionIndexer;??
  • import?android.widget.TextView;??
  • public?class?MyAdapter?extends?BaseAdapter?implements?SectionIndexer?{??
  • ????private?ArrayList<String>?stringArray;??
  • ????private?Context?context;??
  • ????public?MyAdapter(Context?_context,?ArrayList<String>?arr)?{??
  • ????????stringArray?=?arr;??
  • ????????context?=?_context;??
  • ????}??
  • ????public?int?getCount()?{??
  • ????????return?stringArray.size();??
  • ????}??
  • ????public?Object?getItem(int?arg0)?{??
  • ????????return?stringArray.get(arg0);??
  • ????}??
  • ????public?long?getItemId(int?arg0)?{??
  • ????????return?0;??
  • ????}??
  • ????public?View?getView(int?position,?View?v,?ViewGroup?parent)?{??
  • ????????LayoutInflater?inflate?=?((Activity)?context).getLayoutInflater();??
  • ????????View?view?=?(View)?inflate.inflate(R.layout.listview_row,?null);??
  • ????????LinearLayout?header?=?(LinearLayout)?view.findViewById(R.id.section);??
  • ????????String?label?=?stringArray.get(position);??
  • ????????char?firstChar?=?label.toUpperCase().charAt(0);??
  • ????????if?(position?==?0)?{??
  • ????????????setSection(header,?label);??
  • ????????}?else?{??
  • ????????????String?preLabel?=?stringArray.get(position?-?1);??
  • ????????????char?preFirstChar?=?preLabel.toUpperCase().charAt(0);??
  • ????????????if?(firstChar?!=?preFirstChar)?{??
  • ????????????????setSection(header,?label);??
  • ????????????}?else?{??
  • ????????????????header.setVisibility(View.GONE);??
  • ????????????}??
  • ????????}??
  • ????????TextView?textView?=?(TextView)?view.findViewById(R.id.textView);??
  • ????????textView.setText(label);??
  • ????????return?view;??
  • ????}??
  • ????private?void?setSection(LinearLayout?header,?String?label)?{??
  • ????????TextView?text?=?new?TextView(context);??
  • ????????header.setBackgroundColor(0xffaabbcc);??
  • ????????text.setTextColor(Color.WHITE);??
  • ????????text.setText(label.substring(0,?1).toUpperCase());??
  • ????????text.setTextSize(20);??
  • ????????text.setPadding(5,?0,?0,?0);??
  • ????????text.setGravity(Gravity.CENTER_VERTICAL);??
  • ????????header.addView(text);??
  • ????}??
  • ????public?int?getPositionForSection(int?section)?{??
  • ????????if?(section?==?35)?{??
  • ????????????return?0;??
  • ????????}??
  • ????????for?(int?i?=?0;?i?<?stringArray.size();?i++)?{??
  • ????????????String?l?=?stringArray.get(i);??
  • ????????????char?firstChar?=?l.toUpperCase().charAt(0);??
  • ????????????if?(firstChar?==?section)?{??
  • ????????????????return?i;??
  • ????????????}??
  • ????????}??
  • ????????return?-1;??
  • ????}??
  • ????public?int?getSectionForPosition(int?arg0)?{??
  • ????????return?0;??
  • ????}??
  • ????public?Object[]?getSections()?{??
  • ????????return?null;??
  • ????}??
  • }??

    ?

    ?

    ?

    4.? SideBar.java

    ?

  • package?android.test;??
  • import?android.content.Context;??
  • import?android.graphics.Canvas;??
  • import?android.graphics.Paint;??
  • import?android.util.AttributeSet;??
  • import?android.view.MotionEvent;??
  • import?android.view.View;??
  • import?android.widget.ListView;??
  • import?android.widget.SectionIndexer;??
  • public?class?SideBar?extends?View?{??
  • ????private?char[]?l;??
  • ????private?SectionIndexer?sectionIndexter?=?null;??
  • ????private?ListView?list;??
  • ????private?final?int?m_nItemHeight?=?29;??
  • ????public?SideBar(Context?context)?{??
  • ????????super(context);??
  • ????????init();??
  • ????}??
  • ????public?SideBar(Context?context,?AttributeSet?attrs)?{??
  • ????????super(context,?attrs);??
  • ????????init();??
  • ????}??
  • ????private?void?init()?{??
  • ????????l?=?new?char[]?{?'A',?'B',?'C',?'D',?'E',?'F',?'G',?'H',?'I',?'J',?'K',?'L',?'M',?'N',?'O',?'P',?'Q',?'R',?'S',??
  • ????????????????'T',?'U',?'V',?'W',?'X',?'Y',?'Z'?};??
  • ????????setBackgroundColor(0x44FFFFFF);??
  • ????}??
  • ????public?SideBar(Context?context,?AttributeSet?attrs,?int?defStyle)?{??
  • ????????super(context,?attrs,?defStyle);??
  • ????????init();??
  • ????}??
  • ????public?void?setListView(ListView?_list)?{??
  • ????????list?=?_list;??
  • ????????sectionIndexter?=?(SectionIndexer)?_list.getAdapter();??
  • ????}??
  • ????public?boolean?onTouchEvent(MotionEvent?event)?{??
  • ????????super.onTouchEvent(event);??
  • ????????int?i?=?(int)?event.getY();??
  • ????????int?idx?=?i?/?m_nItemHeight;??
  • ????????if?(idx?>=?l.length)?{??
  • ????????????idx?=?l.length?-?1;??
  • ????????}?else?if?(idx?<?0)?{??
  • ????????????idx?=?0;??
  • ????????}??
  • ????????if?(event.getAction()?==?MotionEvent.ACTION_DOWN?||?event.getAction()?==?MotionEvent.ACTION_MOVE)?{??
  • ????????????if?(sectionIndexter?==?null)?{??
  • ????????????????sectionIndexter?=?(SectionIndexer)?list.getAdapter();??
  • ????????????}??
  • ????????????int?position?=?sectionIndexter.getPositionForSection(l[idx]);??
  • ????????????if?(position?==?-1)?{??
  • ????????????????return?true;??
  • ????????????}??
  • ????????????list.setSelection(position);??
  • ????????}??
  • ????????return?true;??
  • ????}??
  • ????protected?void?onDraw(Canvas?canvas)?{??
  • ????????Paint?paint?=?new?Paint();??
  • ????????paint.setColor(0xFFA6A9AA);??
  • ????????paint.setTextSize(20);??
  • ????????paint.setTextAlign(Paint.Align.CENTER);??
  • ????????float?widthCenter?=?getMeasuredWidth()?/?2;??
  • ????????for?(int?i?=?0;?i?<?l.length;?i++)?{??
  • ????????????canvas.drawText(String.valueOf(l[i]),?widthCenter,?m_nItemHeight?+?(i?*?m_nItemHeight),?paint);??
  • ????????}??
  • ????????super.onDraw(canvas);??
  • ????}??
  • }??

    ?

    ?

    ?

    5. Main.java

    ?

  • package?android.test;??
  • import?java.util.ArrayList;??
  • import?android.app.Activity;??
  • import?android.os.Bundle;??
  • import?android.widget.ListView;??
  • public?class?Main?extends?Activity?{??
  • ????/**?Called?when?the?activity?is?first?created.?*/??
  • ????@Override??
  • ????public?void?onCreate(Bundle?savedInstanceState)?{??
  • ????????super.onCreate(savedInstanceState);??
  • ????????setContentView(R.layout.main);??
  • ????????ListView?list?=?(ListView)?findViewById(R.id.myListView);??
  • ????????ArrayList<String>?stringList?=?InitListViewData();??
  • ????????MyAdapter?adapter?=?new?MyAdapter(this,?stringList);??
  • ????????list.setAdapter(adapter);??
  • ????????SideBar?indexBar?=?(SideBar)?findViewById(R.id.sideBar);??
  • ????????indexBar.setListView(list);??
  • ????}??
  • ????private?ArrayList<String>?InitListViewData()?{??
  • ????????ArrayList<String>?stringList?=?new?ArrayList<String>();??
  • ????????stringList.add("aback");??
  • ????????stringList.add("abash");??
  • ????????stringList.add("abbey");??
  • ????????stringList.add("abhor");??
  • ????????stringList.add("abide");??
  • ????????stringList.add("abuse");??
  • ????????stringList.add("candidate");??
  • ????????stringList.add("capture");??
  • ????????stringList.add("careful");??
  • ????????stringList.add("catch");??
  • ????????stringList.add("cause");??
  • ????????stringList.add("celebrate");??
  • ????????stringList.add("forever");??
  • ????????stringList.add("fable");??
  • ????????stringList.add("fidelity");??
  • ????????stringList.add("fox");??
  • ????????stringList.add("funny");??
  • ????????stringList.add("fail");??
  • ????????stringList.add("jail");??
  • ????????stringList.add("jade");??
  • ????????stringList.add("jailor");??
  • ????????stringList.add("january");??
  • ????????stringList.add("jasmine");??
  • ????????stringList.add("jazz");??
  • ????????stringList.add("zero");??
  • ????????stringList.add("zoo");??
  • ????????stringList.add("zeus");??
  • ????????stringList.add("zebra");??
  • ????????stringList.add("zest");??
  • ????????stringList.add("zing");??
  • ????????return?stringList;??
  • ????}??
  • } ?

    ?

    ?

  • 热点排行