android字母导航条的简单实现

dizhi'   http://www.oschina.net/question/96894_24933



#Activity

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package a.b;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
 
public class TestLetterNavActivity extends Activity {
     private final static char [] LETTERS = 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' };
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.main);
         final ListView lv = (ListView)findViewById(R.id.listView1);
         lv.setAdapter( new SimpleAdapter( this , getDatas(),
                 android.R.layout.simple_list_item_2,
                 new String[]{ "id" , "val" },
                 new int []{android.R.id.text1,android.R.id.text2}));
         
         //动态添加组件
         LinearLayout.LayoutParams lp_ff = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
         LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout5);
         for ( char a : LETTERS){
             final TextView tv = new TextView( this );
             tv.setLayoutParams(lp_ff);
             tv.setText(String.valueOf(a));
             tv.setTextAppearance(TestLetterNavActivity. this , R.style.letterNavStyle);
             tv.setGravity(Gravity.CENTER);
             tv.setOnClickListener( new OnClickListener() {
                 @Override
                 public void onClick(View v) {
                     String s = tv.getText().toString();
                     Toast.makeText(TestLetterNavActivity. this , s, Toast.LENGTH_SHORT).show();
                     lv.setSelection(getStartIndex(s));
                 }
             });
             ll.addView(tv);
         }
     }
     
     private List<Map<String,String>> getDatas(){
         List<Map<String,String>> returnList = new ArrayList<Map<String,String>>();
         for ( int i= 1 ;i<= 260 ;i++){
             Map<String,String> map = new HashMap<String,String>();
             map.put( "id" , "id-" +i);
             map.put( "val" , "value-" +i);
             returnList.add(map);
     }
         return returnList;
     }
     
     private int getStartIndex(String letter){
         int returnInt = 0 ;
         for ( int i= 0 ;i<LETTERS.length;i++){
             if (letter.equals(String.valueOf(LETTERS[i]))){
                 returnInt = ( 260 /LETTERS.length)*i;
                 break ;
             }
         }
         return returnInt;
     }
}
#layout

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<? xml version = "1.0" encoding = "utf-8" ?>
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
     android:layout_width = "fill_parent"
     android:layout_height = "fill_parent" android:orientation = "vertical" >
     < LinearLayout android:id = "@+id/linearLayout1" android:layout_height = "fill_parent" android:layout_width = "fill_parent" android:orientation = "horizontal" android:gravity = "center_vertical|center_horizontal" android:layout_weight = "7" >
         < Spinner android:layout_weight = "1" android:layout_width = "wrap_content" android:id = "@+id/spinner1" android:layout_height = "wrap_content" ></ Spinner >
     </ LinearLayout >
     < LinearLayout android:id = "@+id/linearLayout2" android:layout_height = "fill_parent" android:layout_weight = "1" android:layout_width = "fill_parent" android:orientation = "horizontal" >
         < LinearLayout android:id = "@+id/linearLayout4" android:orientation = "vertical" android:layout_weight = "1" android:layout_height = "fill_parent" android:layout_width = "fill_parent" >
             < ListView android:id = "@+id/listView1" android:layout_height = "fill_parent" android:layout_width = "fill_parent" ></ ListView >
         </ LinearLayout >
         < LinearLayout android:id = "@+id/linearLayout5" android:orientation = "vertical" android:layout_height = "fill_parent" android:layout_width = "fill_parent" android:background = "#a0a0a0" android:layout_weight = "10" >
         </ LinearLayout >
     </ LinearLayout >
</ LinearLayout >
#style

?
1
2
3
4
5
6
7
8
<? xml version = "1.0" encoding = "utf-8" ?>
< resources >
     < style name = "letterNavStyle" >
         < item name = "android:textColor" >#000000</ item >
         < item name = "android:textStyle" >bold</ item >
         < item name = "android:textSize" >10dip</ item >
     </ style >
</ resources >

逻辑说明:

自造了一个结果集,里边有260个元素

一共26个字母,每个10个元素

真是环境去查询数据库即可

大体实现思路是:

维护数据,如:录入联系人,通过pinyin4j将联系人的首字母弄出来后存在表中

然后当用户点击字母导航条时,通过所选择的字母到数据库中计算位置

然后通过listview.setSelection定位来实现

如果大家有更好的方法,记得要分享啊

欢迎斧正

个人声明:恺哥做事向来有始有终

此次抛砖引玉,是为了兑现http://www.oschina.net/question/96894_24665该贴的诺言

有方案后一定分享

共同学习,共同进步


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值