Android 侧边栏快速索引(点击索引、滑动索引),通讯录样式
生活随笔
收集整理的這篇文章主要介紹了
Android 侧边栏快速索引(点击索引、滑动索引),通讯录样式
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
功能描述:側(cè)邊欄滑動(dòng)索引、點(diǎn)擊索引、
數(shù)據(jù)封裝:得到顯示數(shù)據(jù)數(shù)組或集合,封裝成對(duì)象
未解決問(wèn)題:如何讓ListView增加條件,有的能點(diǎn)擊,有的不能點(diǎn)擊(問(wèn)題出現(xiàn):當(dāng)點(diǎn)擊有背景的字母時(shí),然后觸發(fā)點(diǎn)擊事件,應(yīng)該干掉……,路過(guò)請(qǐng)指教)
后續(xù):第一次寫博客,以往都是轉(zhuǎn)載,發(fā)現(xiàn)了樂(lè)趣,希望路過(guò)的人多多指教
補(bǔ)充:代碼有參考網(wǎng)上案例,然后結(jié)合自己想法實(shí)現(xiàn),感謝!
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
完成后樣式:
Activtiy核心代碼
package com.example.characterindex;import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List;import net.sourceforge.pinyin4j.PinyinHelper; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView;/*** @author SmileBigDog*/public class MainActivity extends Activity {private ListView lvIndexItem;private ListView lvRightItem;private List<Person> persons;private List<String> chs;private int height;//索引布局高度private boolean flag = true;//@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initLayout();initData();dataDeal();/CustomAdapter adapter = new CustomAdapter(this, persons);lvIndexItem.setAdapter(adapter);lvIndexItem.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {if(!persons.get(position).getName().equals("")){}}});}@Overridepublic void onWindowFocusChanged(boolean hasFocus) {super.onWindowFocusChanged(hasFocus);if(flag){height = lvRightItem.getHeight();//完成右邊界面繪制finishRightLayout(persons);flag = false;}}void initLayout() {lvIndexItem = (ListView) findViewById(R.id.lv_indexitem);lvRightItem = (ListView) findViewById(R.id.lv_indexrightitem);}void initData() {persons = new ArrayList<Person>();Person p1 = new Person("邢質(zhì)斌");persons.add(p1);Person p2 = new Person("王寶強(qiáng)");persons.add(p2);Person p3 = new Person("柳巖");persons.add(p3);Person p4 = new Person("李修平");persons.add(p4);Person p5 = new Person("沈冰");persons.add(p5);Person p6 = new Person("和晶");persons.add(p6);Person p7 = new Person("海霞");persons.add(p7);Person p8 = new Person("韓紅");persons.add(p8);Person p9 = new Person("張泉靈");persons.add(p9);Person p10 = new Person("李瑞英");persons.add(p10);Person p11 = new Person("李小萌 ");persons.add(p11);Person p12 = new Person("哈哈");persons.add(p12);Person p13 = new Person("李梓");persons.add(p13);Person p14 = new Person("楊晨");persons.add(p14);Person p15 = new Person("煙花");persons.add(p15);Person p16 = new Person("眼黑");persons.add(p16);Person p17 = new Person("許三多");persons.add(p17);Person p18 = new Person("賀紅梅");persons.add(p18);Person p19 = new Person("程哈哈");persons.add(p19);Person p20 = new Person("梁艷");persons.add(p20);Person p21 = new Person("阿萊");persons.add(p21);Person p22 = new Person("批發(fā)");persons.add(p22);Person p23 = new Person("吉祥");persons.add(p23);Person p24 = new Person("德發(fā)");persons.add(p24);Person p25 = new Person("孟子");persons.add(p25);}void dataDeal() {//取得拼音for (Person p : persons) p.setPinYinName(getPinYinNameHeader(p.getName()));//排序Collections.sort(persons, new ComparatorPersonToPinYin());//插入值String tempCh = "1";for(int i = 0; i < persons.size(); i++){if(!tempCh.equals(persons.get(i).getPinYinName().charAt(0) + ""))persons.add(i, new Person("",persons.get(i).getPinYinName().charAt(0) + ""));tempCh = persons.get(i).getPinYinName().charAt(0) + "";}}public String getPinYinNameHeader(String str) {String convert = "";for (int i = 0; i < str.length(); i++) {char word = str.charAt(i);String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);if (pinyinArray != null)convert += pinyinArray[0].charAt(0);elseconvert += word;}return convert;}class ComparatorPersonToPinYin implements Comparator<Person>{@Overridepublic int compare(Person lhs, Person rhs) {//只比較二次(暫時(shí)只能比較英文)if((lhs.getPinYinName().charAt(0) + "") != null && (rhs.getPinYinName().charAt(0) + "") != null){if((lhs.getPinYinName().charAt(0) + "").compareTo(rhs.getPinYinName().charAt(0) + "") != 0){return (lhs.getPinYinName().charAt(0) + "").compareTo(rhs.getPinYinName().charAt(0) + "");}else{if((lhs.getPinYinName().charAt(1) + "") != null && (rhs.getPinYinName().charAt(1) + "") != null){return (lhs.getPinYinName().charAt(1) + "").compareTo(rhs.getPinYinName().charAt(1) + "");}else{return 0;}}}else{return 0;}}}//完成右邊界面private void finishRightLayout(List<Person> persons2) {chs = new ArrayList<String>();for (Person person : persons2) {if(person.getName().equals(""))chs.add(person.getPinYinName());}CustomRightAdapter adapter = new CustomRightAdapter(this, chs, height);lvRightItem.setAdapter(adapter);//Click事件lvRightItem.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {String ch = chs.get(position);int count = 0;for(int i = 0; i < persons.size(); i++){if(persons.get(i).getPinYinName().equals(ch))count = i;}if(lvIndexItem.getHeaderViewsCount() > 0){lvIndexItem.setSelectionFromTop(count + lvIndexItem.getHeaderViewsCount(), 0);}else{lvIndexItem.setSelectionFromTop(count, 0);}}});//touch事件lvRightItem.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {float y = event.getY();int index = (int)(y / (height / chs.size() - 16));lvIndexItem.setSelectionFromTop(index, 0);return false;}});}} / class CustomRightAdapter extends BaseAdapter{private Context ct;private List<String> chs;private int height;public CustomRightAdapter(Context ct, List<String> chs, int height) {this.ct = ct;this.chs = chs;this.height = height;}@Overridepublic int getCount() {return chs.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if(convertView == null){ListView.LayoutParams params = new ListView.LayoutParams(LayoutParams.WRAP_CONTENT, height / chs.size()); TextView tv = new TextView(ct);tv.setLayoutParams(params);tv.setGravity(Gravity.CENTER);tv.setTextSize(16);tv.setPadding(5, 0, 5, 0);holder = new ViewHolder();holder.tv = tv;convertView = tv;convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}holder.tv.setText(chs.get(position).toUpperCase());return convertView;}class ViewHolder{TextView tv;}} // /// class CustomAdapter extends BaseAdapter {private Context ct;private List<Person> persons;public CustomAdapter(Context ct, List<Person> persons) {this.ct = ct;this.persons = persons;}@Overridepublic int getCount() {return persons.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if(convertView == null){holder = new ViewHolder();convertView = LayoutInflater.from(ct).inflate(R.layout.sortitem_stub_layout, null);holder.tvIndex = (TextView) convertView.findViewById(R.id.tv_index);holder.tvName = (TextView) convertView.findViewById(R.id.tv_name);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}if(persons.get(position).getName().equals("")){holder.tvIndex.setVisibility(View.VISIBLE);holder.tvName.setVisibility(View.GONE);}else{holder.tvIndex.setVisibility(View.GONE);holder.tvName.setVisibility(View.VISIBLE);}holder.tvIndex.setText((persons.get(position).getPinYinName().charAt(0)+"").toUpperCase());holder.tvName.setText(persons.get(position).getName());return convertView ;}class ViewHolder{TextView tvIndex;TextView tvName;}}
總結(jié)
以上是生活随笔為你收集整理的Android 侧边栏快速索引(点击索引、滑动索引),通讯录样式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 项目开发流程_以房地产项目总的视角,谈谈
- 下一篇: 那些你不愿说给领导的话