`
407827531
  • 浏览: 1076424 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

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

阅读更多

 

推荐安卓开发神器(里面有各种UI特效和android代码库实例)

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

 

1. Main.xml

 

 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent">  
  6. <ListView android:id="@+id/myListView"  
  7.     android:layout_width="fill_parent"  
  8.     android:layout_height="fill_parent"  
  9. />  
  10. <android.test.SideBar  
  11.     android:id = "@+id/sideBar"  
  12.     android:layout_height="fill_parent"  
  13.     android:layout_width="22px"  
  14.     android:layout_alignParentRight="true"  
  15. />  
  16. </RelativeLayout>  

 

 

 

2. listview_row.xml

 

 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:orientation="vertical"  
  5.     android:layout_width="fill_parent"  
  6.     android:layout_height="wrap_content">  
  7. <LinearLayout  
  8.     android:id="@+id/section"  
  9.     android:layout_width="fill_parent"  
  10.     android:layout_height="wrap_content"  
  11. />  
  12. <TextView android:id="@+id/textView"  
  13.     android:layout_width="wrap_content"  
  14.     android:layout_height="80sp"  
  15.     android:textSize="45sp"  
  16. />  
  17. </LinearLayout>  

 

 

 

3. MyAdapter.java

 

 
  1. package android.test;  
  2. import java.util.ArrayList;  
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.graphics.Color;  
  6. import android.view.Gravity;  
  7. import android.view.LayoutInflater;  
  8. import android.view.View;  
  9. import android.view.ViewGroup;  
  10. import android.widget.BaseAdapter;  
  11. import android.widget.LinearLayout;  
  12. import android.widget.SectionIndexer;  
  13. import android.widget.TextView;  
  14. public class MyAdapter extends BaseAdapter implements SectionIndexer {  
  15.     private ArrayList<String> stringArray;  
  16.     private Context context;  
  17.     public MyAdapter(Context _context, ArrayList<String> arr) {  
  18.         stringArray = arr;  
  19.         context = _context;  
  20.     }  
  21.     public int getCount() {  
  22.         return stringArray.size();  
  23.     }  
  24.     public Object getItem(int arg0) {  
  25.         return stringArray.get(arg0);  
  26.     }  
  27.     public long getItemId(int arg0) {  
  28.         return 0;  
  29.     }  
  30.     public View getView(int position, View v, ViewGroup parent) {  
  31.         LayoutInflater inflate = ((Activity) context).getLayoutInflater();  
  32.         View view = (View) inflate.inflate(R.layout.listview_row, null);  
  33.         LinearLayout header = (LinearLayout) view.findViewById(R.id.section);  
  34.         String label = stringArray.get(position);  
  35.         char firstChar = label.toUpperCase().charAt(0);  
  36.         if (position == 0) {  
  37.             setSection(header, label);  
  38.         } else {  
  39.             String preLabel = stringArray.get(position - 1);  
  40.             char preFirstChar = preLabel.toUpperCase().charAt(0);  
  41.             if (firstChar != preFirstChar) {  
  42.                 setSection(header, label);  
  43.             } else {  
  44.                 header.setVisibility(View.GONE);  
  45.             }  
  46.         }  
  47.         TextView textView = (TextView) view.findViewById(R.id.textView);  
  48.         textView.setText(label);  
  49.         return view;  
  50.     }  
  51.     private void setSection(LinearLayout header, String label) {  
  52.         TextView text = new TextView(context);  
  53.         header.setBackgroundColor(0xffaabbcc);  
  54.         text.setTextColor(Color.WHITE);  
  55.         text.setText(label.substring(01).toUpperCase());  
  56.         text.setTextSize(20);  
  57.         text.setPadding(5000);  
  58.         text.setGravity(Gravity.CENTER_VERTICAL);  
  59.         header.addView(text);  
  60.     }  
  61.     public int getPositionForSection(int section) {  
  62.         if (section == 35) {  
  63.             return 0;  
  64.         }  
  65.         for (int i = 0; i < stringArray.size(); i++) {  
  66.             String l = stringArray.get(i);  
  67.             char firstChar = l.toUpperCase().charAt(0);  
  68.             if (firstChar == section) {  
  69.                 return i;  
  70.             }  
  71.         }  
  72.         return -1;  
  73.     }  
  74.     public int getSectionForPosition(int arg0) {  
  75.         return 0;  
  76.     }  
  77.     public Object[] getSections() {  
  78.         return null;  
  79.     }  
  80. }  

 

 

 

4.  SideBar.java

 

 
  1. package android.test;  
  2. import android.content.Context;  
  3. import android.graphics.Canvas;  
  4. import android.graphics.Paint;  
  5. import android.util.AttributeSet;  
  6. import android.view.MotionEvent;  
  7. import android.view.View;  
  8. import android.widget.ListView;  
  9. import android.widget.SectionIndexer;  
  10. public class SideBar extends View {  
  11.     private char[] l;  
  12.     private SectionIndexer sectionIndexter = null;  
  13.     private ListView list;  
  14.     private final int m_nItemHeight = 29;  
  15.     public SideBar(Context context) {  
  16.         super(context);  
  17.         init();  
  18.     }  
  19.     public SideBar(Context context, AttributeSet attrs) {  
  20.         super(context, attrs);  
  21.         init();  
  22.     }  
  23.     private void init() {  
  24.         l = new char[] { 'A''B''C''D''E''F''G''H''I''J''K''L''M''N''O''P''Q''R''S',  
  25.                 'T''U''V''W''X''Y''Z' };  
  26.         setBackgroundColor(0x44FFFFFF);  
  27.     }  
  28.     public SideBar(Context context, AttributeSet attrs, int defStyle) {  
  29.         super(context, attrs, defStyle);  
  30.         init();  
  31.     }  
  32.     public void setListView(ListView _list) {  
  33.         list = _list;  
  34.         sectionIndexter = (SectionIndexer) _list.getAdapter();  
  35.     }  
  36.     public boolean onTouchEvent(MotionEvent event) {  
  37.         super.onTouchEvent(event);  
  38.         int i = (int) event.getY();  
  39.         int idx = i / m_nItemHeight;  
  40.         if (idx >= l.length) {  
  41.             idx = l.length - 1;  
  42.         } else if (idx < 0) {  
  43.             idx = 0;  
  44.         }  
  45.         if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) {  
  46.             if (sectionIndexter == null) {  
  47.                 sectionIndexter = (SectionIndexer) list.getAdapter();  
  48.             }  
  49.             int position = sectionIndexter.getPositionForSection(l[idx]);  
  50.             if (position == -1) {  
  51.                 return true;  
  52.             }  
  53.             list.setSelection(position);  
  54.         }  
  55.         return true;  
  56.     }  
  57.     protected void onDraw(Canvas canvas) {  
  58.         Paint paint = new Paint();  
  59.         paint.setColor(0xFFA6A9AA);  
  60.         paint.setTextSize(20);  
  61.         paint.setTextAlign(Paint.Align.CENTER);  
  62.         float widthCenter = getMeasuredWidth() / 2;  
  63.         for (int i = 0; i < l.length; i++) {  
  64.             canvas.drawText(String.valueOf(l[i]), widthCenter, m_nItemHeight + (i * m_nItemHeight), paint);  
  65.         }  
  66.         super.onDraw(canvas);  
  67.     }  
  68. }  

 

 

 

5. Main.java

 

 
  1. package android.test;  
  2. import java.util.ArrayList;  
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.widget.ListView;  
  6. public class Main extends Activity {  
  7.     /** Called when the activity is first created. */  
  8.     @Override  
  9.     public void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.main);  
  12.         ListView list = (ListView) findViewById(R.id.myListView);  
  13.         ArrayList<String> stringList = InitListViewData();  
  14.         MyAdapter adapter = new MyAdapter(this, stringList);  
  15.         list.setAdapter(adapter);  
  16.         SideBar indexBar = (SideBar) findViewById(R.id.sideBar);  
  17.         indexBar.setListView(list);  
  18.     }  
  19.     private ArrayList<String> InitListViewData() {  
  20.         ArrayList<String> stringList = new ArrayList<String>();  
  21.         stringList.add("aback");  
  22.         stringList.add("abash");  
  23.         stringList.add("abbey");  
  24.         stringList.add("abhor");  
  25.         stringList.add("abide");  
  26.         stringList.add("abuse");  
  27.         stringList.add("candidate");  
  28.         stringList.add("capture");  
  29.         stringList.add("careful");  
  30.         stringList.add("catch");  
  31.         stringList.add("cause");  
  32.         stringList.add("celebrate");  
  33.         stringList.add("forever");  
  34.         stringList.add("fable");  
  35.         stringList.add("fidelity");  
  36.         stringList.add("fox");  
  37.         stringList.add("funny");  
  38.         stringList.add("fail");  
  39.         stringList.add("jail");  
  40.         stringList.add("jade");  
  41.         stringList.add("jailor");  
  42.         stringList.add("january");  
  43.         stringList.add("jasmine");  
  44.         stringList.add("jazz");  
  45.         stringList.add("zero");  
  46.         stringList.add("zoo");  
  47.         stringList.add("zeus");  
  48.         stringList.add("zebra");  
  49.         stringList.add("zest");  
  50.         stringList.add("zing");  
  51.         return stringList;  
  52.     }  
  53. }  

 

 

分享到:
评论

相关推荐

    Android-联系人A-Z索引列表

    在Android开发中,创建一个联系人A-Z索引列表是一项常见的需求,这使得用户能够快速地定位和查找特定联系人。这种功能广泛应用于各种通讯录应用或者任何涉及到大量需分类数据的应用。标题“Android-联系人A-Z索引...

    仿手机联系人拼音分类列表

    在Android中,可以使用SectionIndexer接口来实现这个功能,它允许自定义索引器,使得ListView或RecyclerView能够显示分类标题。 对于iOS开发,类似地,我们可以使用CoreData或者AddressBook框架来获取联系人数据,...

    联系人分章节显示、ListView快速滑动显示联系人首字母、附带字母表快速查找的例子

    这是通过将联系人数据按照首字母进行分类,形成类似"A"、"B"、"C"这样的章节,便于用户按字母顺序浏览和查找。在Android中,我们可以使用`ArrayAdapter`或`CursorAdapter`结合`SectionIndexer`接口来实现这一功能。`...

    自己写的通讯录

    在这个项目中,适配器可能被定制以适应不同类型的联系人分类。 其次,"分类显示"涉及到数据结构和逻辑处理。开发者可能使用HashMap或者其他数据结构来存储联系人,其中键可能是联系人的首字母或者类别,值则是对应...

    带字母索引的ListView

    这种功能常见于联系人应用或者分类目录列表中。 首先,实现这样的功能需要对ListView的Adapter进行自定义。Adapter是连接数据源与ListView的桥梁,它负责将数据转化为ListView中的View。在这个场景下,我们需要在...

    Android-IndexBarLayout类似手机联系人最右侧的字母导航栏.

    这种设计通常出现在如联系人列表、商店分类等场景,用户可以通过点击字母栏快速跳转到对应首字母的数据项。这个功能在用户体验中扮演着重要角色,因为它提高了用户查找信息的效率。 IndexBarLayout是自定义布局的一...

    安卓Android源码——按字母索引滑动.rar

    本资源"安卓Android源码——按字母索引滑动.rar"提供了一个特别的功能实现:按字母索引滑动,这在应用中常用于联系人列表或者应用分类等场景,能够帮助用户快速定位到目标内容。 1. **源码解析**: - 在Android中...

    模仿通讯录,字母检索,快速定位

    首先,字母分类是将联系人按照姓名的首字母进行排序,以便用户可以直观地看到所有以特定字母开头的联系人。对于汉字,我们需要考虑到中文的拼音处理,通常会通过转换为Pinyin(拼音)来进行排序。例如,使用开源库如...

    contact listview fastscroll

    这个接口要求提供一个方法来获取每个项目的分类索引,通常是字母顺序。然后,在ListView中设置`fastScrollEnabled`属性为`true`,这样就能启用快速滚动功能。 代码示例: ```java ListView listView = ...

    快速滚动和分节索引功能

    例如,在通讯录应用中,我们可以看到A-Z的字母索引,点击任一字母可以快速跳转到对应首字母的联系人列表。在`recycler-fast-scroll`项目中,分节索引支持横向显示,这使得用户可以在水平方向上浏览和选择。同样,分...

    字母表查询

    在IT行业中,字母表查询是一种常见的数据检索方法,特别是在处理大量分类数据时,例如联系人应用、电商商品分类等。这种功能使得用户可以通过快速滚动字母表来定位目标内容,提高查找效率。本节将深入探讨字母表查询...

    ListViewDemo2.0

    10. **SectionIndexer**:如果数据集包含分类,可以实现SectionIndexer接口,提供快速滚动至特定首字母的功能,类似通讯录的索引栏。 11. **空视图**:当数据为空时,可以显示一个空视图来提示用户。 "listview...

    ListView 实现点击侧边A-Z快速查找.rar

    这个功能在处理大量分类数据时非常有用,比如联系人应用或电子书应用。 首先,我们要理解这个功能的工作原理。在Android的ListView中,通常会有一个独立的侧边栏,显示字母表。当用户点击某个字母时,ListView会...

    src.zip_android开发_Java_

    这个功能通常用于联系人应用或者商品分类列表等场景。在Java编程语言环境下,我们可以借助Android SDK中的多种组件和方法来实现这一功能。 首先,我们需要一个ListView或RecyclerView作为列表的基础容器,用于展示...

    ReactNativeListview处理大型数据集

    这个功能通常用于联系人列表或商品分类,用户可以通过点击字母快速跳转到对应首字母的数据项。React Native社区提供了一些库,如`react-native-section-list-get-item-by-id`或`react-native-quick-index-list`,...

Global site tag (gtag.js) - Google Analytics