字母条索引定位(一)


activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

    <com.atguigu.quickindex.QuickIndexBar
        android:id="@+id/qucikIndexBar"
        android:layout_width="35dp"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true"
        android:background="#CFCFCF" />

    <TextView
        android:id="@+id/currentIndex"
        android:layout_width="120dp"
        android:layout_height="105dp"
        android:layout_centerInParent="true"
        android:background="@drawable/bg_index"
        android:gravity="center"
        android:text="A"
        android:textColor="#ffffff"
        android:textSize="30sp"
        android:visibility="gone" />
</RelativeLayout>

item_friend.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    
    <TextView 
        android:id="@+id/index"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:paddingLeft="10dp"
        android:text="A"
        android:textColor="#ffffff"
        android:background="#666666"
        android:textSize="18sp"/>
    <TextView 
        android:id="@+id/name"
        android:layout_height="wrap_content"
       	android:layout_width="match_parent"
       	android:padding="10dp"
        android:text="adasd"
        android:textColor="#666666"
        android:textSize="20sp"/>
</LinearLayout>

MainActivity

package com.atguigu.quickindex;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.atguigu.quickindex.QuickIndexBar.OnTouchIndexChange;

public class MainActivity extends Activity {

	private ListView listView;
	private QuickIndexBar qucikIndexBar;
	private TextView currentIndex;
	// 数据集合
	private List<Friend> friends = new ArrayList<Friend>();
	// 适配器
	private FriendAdapter adapter;
	private Handler handler = new Handler();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 加载主布局
		setContentView(R.layout.activity_main);
		// 初始化控件
		init();
	}

	private void init() {
		/** 初始化布局视图 */
		listView = (ListView) findViewById(R.id.listview);
		qucikIndexBar = (QuickIndexBar) findViewById(R.id.qucikIndexBar);
		currentIndex = (TextView) findViewById(R.id.currentIndex);
		/** 初始化数据 */
		initData();
		// 创建适配器
		adapter = new FriendAdapter();
		// 设置适配器
		listView.setAdapter(adapter);

		// 设置触摸的字母变化的监听
		qucikIndexBar.setOnTouchIndexChange(new OnTouchIndexChange() {
			@Override
			public void onChange(String word) {// word为当前触摸的字母
				// 显示当前触摸的字母
				showInexWord(word);
				// 使用列表定位到对应的列表项
				locationWord(word);
			}
		});
	}

	private void locationWord(String word) {
		for (int i = 0; i < friends.size(); i++) {
			//名字首字母
			String firstWord = friends.get(i).getPinyin().charAt(0) + "";
			if (firstWord.equals(word)) {
				//定位到item的位置
				listView.setSelection(i);
				return;
			}
		}
	}

	private void showInexWord(String word) {
		currentIndex.setVisibility(View.VISIBLE);
		currentIndex.setText(word);
		//停掉所用handler的消息,防止内存泄露
		handler.removeCallbacksAndMessages(null);
		//2秒的定时器
		handler.postDelayed(new Runnable() {
			@Override
			public void run() {
				currentIndex.setVisibility(View.GONE);
			}
		}, 2000);
	}

	private void initData() {
		// 虚拟数据
		friends.add(new Friend("张晓飞"));
		friends.add(new Friend("杨光福"));
		friends.add(new Friend("胡继群"));
		friends.add(new Friend("刘畅"));

		friends.add(new Friend("钟泽兴"));
		friends.add(new Friend("尹革新"));
		friends.add(new Friend("安传鑫"));
		friends.add(new Friend("张骞壬"));

		friends.add(new Friend("温松"));
		friends.add(new Friend("李凤秋"));
		friends.add(new Friend("刘甫"));
		friends.add(new Friend("娄全超"));
		friends.add(new Friend("张猛"));

		friends.add(new Friend("王英杰"));
		friends.add(new Friend("李振南"));
		friends.add(new Friend("孙仁政"));
		friends.add(new Friend("唐春雷"));
		friends.add(new Friend("牛鹏伟"));
		friends.add(new Friend("姜宇航"));

		friends.add(new Friend("刘挺"));
		friends.add(new Friend("张洪瑞"));
		friends.add(new Friend("张建忠"));
		friends.add(new Friend("侯亚帅"));
		friends.add(new Friend("刘帅"));

		friends.add(new Friend("乔竞飞"));
		friends.add(new Friend("徐雨健"));
		friends.add(new Friend("吴亮"));
		friends.add(new Friend("王兆霖"));

		friends.add(new Friend("阿三"));
		friends.add(new Friend("二毛"));

		/**
		 * Comparable。可以让自定义对象实现一个Comparable接口,这个接口只有一个方法comparableTo(Object o)
		 * 
		 * 其规则是当前对象与o对象进行比较,返回一个int值,系统根据此值进行排序。
		 * 
		 * 如当前对象>o对象,则返回值>0;
		 * 
		 * 如当前对象=o对象,则返回值=0;
		 * 
		 * 如当前对象<o对象,则返回值<0;
		 */
		Collections.sort(friends);
	}

	/**
	 * adapter
	 */
	class FriendAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			return friends.size();
		}

		@Override
		public Object getItem(int position) {
			return friends.get(position);
		}

		@Override
		public long getItemId(int position) {
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder = null;
			if (convertView == null) {
				convertView = View.inflate(getApplicationContext(),
						R.layout.item_friend, null);
				holder = new ViewHolder();
				holder.index = (TextView) convertView.findViewById(R.id.index);
				holder.name = (TextView) convertView.findViewById(R.id.name);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}

			Friend friend = friends.get(position);
			String firstWord = friend.getPinyin().charAt(0) + "";// 得到拼音首字母

			if (position == 0) {// 如果是第一个, 显示首字母View
				holder.index.setVisibility(View.VISIBLE);
			} else {// 如果不是第一个
				// 上一项的拼音首字母
				String preFirstWord = friends.get(position - 1).getPinyin()
						.charAt(0)
						+ "";
				if (firstWord.equals(preFirstWord)) {// 如果当前的与上一个相同, 不显示首字母View
					holder.index.setVisibility(View.GONE);
				} else {// 否则, 显示
					holder.index.setVisibility(View.VISIBLE);
				}
			}

			holder.index.setText(firstWord);
			holder.name.setText(friend.getName());

			return convertView;
		}

		class ViewHolder {
			TextView index, name;
		}
	}
}

QuickIndexBar

package com.atguigu.quickindex;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

/**
 * 自定义快速索引的View
 */
public class QuickIndexBar extends View {

	public QuickIndexBar(Context context, AttributeSet attrs) {
		super(context, attrs);
		// 初始化paint
		paint = new Paint();
		paint.setAntiAlias(true);// 抗据齿
	}

	private Paint paint;

	// 字母的宽、高
	private int cellWidth;
	private int cellHeight;
	private int touchIndex = -1;
	// 字体选中、非选中大小
	private int textSize;
	private int textTouchSize;

	private String[] indexArr = { "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" };

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);

		cellWidth = this.getMeasuredWidth();
		cellHeight = this.getMeasuredHeight() / indexArr.length;

		textSize = cellHeight - 5;
		textTouchSize = cellHeight + 5;
	}

	@SuppressLint("DrawAllocation")
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);

		for (int i = 0; i < indexArr.length; i++) {
			// 字母的字体大小
			paint.setTextSize(i == touchIndex ? textTouchSize : textSize);
			// 字母的字体颜色
			paint.setColor(i == touchIndex ? Color.parseColor("#666666")
					: Color.WHITE);
			// 计算字母显示的宽高
			Rect bounds = new Rect();
			//paint.getTextBounds(str, 0, str.length(), rect); 
			paint.getTextBounds(indexArr[i], 0, 1, bounds);
			int width = bounds.width();
			int height = bounds.height();
			// 计算字母绘制的坐标
			float x = cellWidth / 2 - width / 2;
			float y = i * cellHeight + cellHeight / 2 + height / 2;
			// 绘制字母文本
			canvas.drawText(indexArr[i], x, y, paint);
		}
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {

		// 相对于当前View的事件y坐标
		int y = (int) event.getY();

		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
		case MotionEvent.ACTION_MOVE:
			// 如果没有在当前字母的区域内, 就需要更新touchIndex, 并重绘
			int index = y / cellHeight;
			if (index != touchIndex) {
				touchIndex = index;
				if (touchIndex >= indexArr.length)
					touchIndex = indexArr.length - 1;
				// 强制重绘
				invalidate();
				// 如果有监听器, 调用监听器的回调方法
				if (onTouchIndexChange != null) {
					onTouchIndexChange.onChange(indexArr[touchIndex]);
				}
			}
			break;
		case MotionEvent.ACTION_UP:
			touchIndex = -1;
			// 强制重绘
			invalidate();
			break;
		default:
			break;
		}
		return true;
	}

	private OnTouchIndexChange onTouchIndexChange;

	public void setOnTouchIndexChange(OnTouchIndexChange onTouchIndexChange) {
		this.onTouchIndexChange = onTouchIndexChange;
	}

	public interface OnTouchIndexChange {
		public void onChange(String word);
	}
}

Friend

package com.atguigu.quickindex;

/**
 * 好友信息对象
 */
public class Friend implements Comparable<Friend> {

	private String name;//姓名
	private String pinyin;//姓名对应的拼音

	public Friend(String name) {
		super();
		this.name = name;
		//通过名字得到对应的拼音
		this.pinyin = PinYinUtils.getPinYin(name);
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPinyin() {
		return pinyin;
	}

	public void setPinyin(String pinyin) {
		this.pinyin = pinyin;
	}

	@Override
	public String toString() {
		return "Friend [name=" + name + ", pinyin=" + pinyin + "]";
	}

	/**
	 * 此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。
	 */
	@Override
	public int compareTo(Friend another) {
		return pinyin.compareTo(another.getPinyin());
	}
}

PinYinUtils

package com.atguigu.quickindex;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 将汉字转换为拼音
 */
public class PinYinUtils {
	/**
	 * 得到指定汉字的拼音
	 * 注意:不应该被频繁调用,它消耗一定内存
	 */
	public static String getPinYin(String hanzi){
		String pinyin = "";
		
		HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();//控制转换是否大小写,是否带音标
		format.setCaseType(HanyuPinyinCaseType.UPPERCASE);//大写
		format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		
		//由于不能直接对多个汉字转换,只能对单个汉字转换
		char[] arr = hanzi.toCharArray();
		for (int i = 0; i < arr.length; i++) {
			if(Character.isWhitespace(arr[i]))continue;//如果是空格,则不处理,进行下次遍历
			
			//汉字是2个字节存储,肯定大于127,所以大于127就可以当为汉字转换
			if(arr[i]>127){
				try {
					//由于多音字的存在,单 dan shan
					String[] pinyinArr = PinyinHelper.toHanyuPinyinStringArray(arr[i], format);
					
					if(pinyinArr!=null){
						pinyin += pinyinArr[0];
					}else {
						pinyin += arr[i];
					}
				} catch (BadHanyuPinyinOutputFormatCombination e) {
					e.printStackTrace();
					//不是正确的汉字
					pinyin += arr[i];
				}
			}else {
				//不是汉字,
				pinyin += arr[i];
			}
		}
		return pinyin;
	}
}

************************************************方法二***************************************************************

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:divider="@null"
        android:fastScrollEnabled="true" />

    <com.example.listsildedel.SideBar
        android:id="@+id/sideBar"
        android:layout_width="25dp"
        android:layout_height="fill_parent"
        android:layout_gravity="right|center_vertical" />

</FrameLayout>
item.xml

<?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="wrap_content"
    android:gravity="center_vertical"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/catalog"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:background="@drawable/mm_contact_title"
        android:paddingRight="4.0dip"
        android:shadowColor="#000000"
        android:shadowDx="1.0"
        android:shadowDy="1.0"
        android:shadowRadius="1.0"
        android:paddingLeft="5dip"
        android:gravity="center_vertical"
         />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/mm_listitem_simple"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/img"
            android:layout_width="40dip"
            android:layout_height="40dip"
            android:layout_marginLeft="5dip"
            android:layout_gravity="center_vertical"
            android:gravity="center_vertical"
            android:src="@drawable/personactivity_takephoto_icon_normal" />

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_margin="8dip"
            android:gravity="center_vertical"
            android:paddingBottom="8dip"
            android:paddingTop="8dip"
            android:singleLine="true"
            android:text="hhhh" />

    </LinearLayout>

</LinearLayout>

list_position.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_gravity="center"
    android:background="@drawable/show_head_toast_bg"
    android:gravity="center"
    android:maxHeight="70dip"
    android:maxWidth="70dip"
    android:minHeight="70dip"
    android:minWidth="70dip"
    android:textColor="@android:color/white"
    android:textSize="50sp" />


MainActivity

package com.example.listsildedel;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {

	private ListView mListView;
	private SideBar indexBar;
	private WindowManager mWindowManager;
	private TextView mDialogText;

	// private View head;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		// 启动activity时不自动弹出软键盘
		getWindow().setSoftInputMode(
				WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
		super.onCreate(savedInstanceState);
		// 加载布局listView+自定义com.example.listsildedel.SideBar
		setContentView(R.layout.activity_main);
		// 得到listView视图
		mListView = (ListView) this.findViewById(R.id.list);
		// 得到自定义控件视图
		indexBar = (SideBar) findViewById(R.id.sideBar);
		// 字母索引控件
		mDialogText = (TextView) LayoutInflater.from(this).inflate(
				R.layout.list_position, null);
		// 初始化默认不可见
		mDialogText.setVisibility(View.INVISIBLE);
		// 获取WindowManager实例
		mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
		/**
		 * 这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View
		 */
		WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
				LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
				WindowManager.LayoutParams.TYPE_APPLICATION,
				WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
						| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
				PixelFormat.TRANSLUCENT);
		// 添加字母索引控件
		mWindowManager.addView(mDialogText, lp);
		indexBar.setTextView(mDialogText);
		// 初始化数据
		List<Content> list = new ArrayList<Content>();
		for (int i = 0; i < 10; i++) {
			Content m;
			if (i < 3)
				m = new Content("A", "选项" + i);
			else if (i < 6)
				m = new Content("F", "选项" + i);
			else
				m = new Content("D", "选项" + i);
			list.add(m);
		}
		// 根据a-z进行排序
		Collections.sort(list, new PinyinComparator());
		// 实例化自定义内容适配类
		MyAdapter adapter = new MyAdapter(this, list);
		// 为listView设置适配
		mListView.setAdapter(adapter);
		// 设置SideBar的ListView内容实现点击a-z中任意一个进行定位
		indexBar.setListView(mListView);
	}

}

MyAdapter

package com.example.listsildedel;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.SectionIndexer;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter implements SectionIndexer{

	private List<Content> list = null;
	private Context mContext;
	
	public MyAdapter(Context mContext, List<Content> list) {
		this.mContext = mContext;
		this.list = list;

	}

	public int getCount() {
		return this.list.size();
	}

	public Object getItem(int position) {
		return list.get(position);
	}

	public long getItemId(int position) {
		return position;
	}

	public View getView(final int position, View view, ViewGroup arg2) {
		ViewHolder viewHolder = null;
		if (view == null) {
			viewHolder = new ViewHolder();
			view = LayoutInflater.from(mContext).inflate(R.layout.item, null);
			viewHolder.tvTitle = (TextView) view.findViewById(R.id.title);
			viewHolder.catalog = (TextView) view.findViewById(R.id.catalog);
			view.setTag(viewHolder);
		} else {
			viewHolder = (ViewHolder) view.getTag();
		}
		
		final Content mContent = list.get(position);
		if (position == 0) {
			//将头部显示,并且获取首字母
			viewHolder.catalog.setVisibility(View.VISIBLE);
			viewHolder.catalog.setText(mContent.getLetter());
		} else {
			String lastCatalog = list.get(position - 1).getLetter();
			if (mContent.getLetter().equals(lastCatalog)) {
				viewHolder.catalog.setVisibility(View.GONE);
			} else {
				viewHolder.catalog.setVisibility(View.VISIBLE);
				viewHolder.catalog.setText(mContent.getLetter());
			}
		}
	
		viewHolder.tvTitle.setText(this.list.get(position).getName());
		
		return view;

	}
	


	final static class ViewHolder {
		TextView tvTitle;
		TextView catalog;
	}


	public Object[] getSections() {
		return null;
	}

	public int getSectionForPosition(int position) {
		
		return 0;
	}

	//根据分类列的索引号获得该序列的首个位置
	public int getPositionForSection(int section) {
		Content mContent;
		String l;
		if (section == '!') {
			return 0;
		} else {
			for (int i = 0; i < getCount(); i++) {
				mContent = (Content) list.get(i);
				l = mContent.getLetter();
				char firstChar = l.toUpperCase().charAt(0);
				if (firstChar == section) {
					return i + 1;
				}

			}
		}
		mContent = null;
		l = null;
		return -1;
	}
}

SideBar

package com.example.listsildedel;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.drawable.ColorDrawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.HeaderViewListAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SectionIndexer;
import android.widget.TextView;

public class SideBar extends View {
	// 字符数组
	private char[] l;

	private SectionIndexer sectionIndexter = null;

	private TextView mDialogText;
	private int type = 1;
	private int color = 0xff858c94;

	/**
	 ***************************************************** 构造器
	 */
	public SideBar(Context context) {
		super(context);
		init();
	}

	public SideBar(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}

	public SideBar(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init();
	}

	protected void onDraw(Canvas canvas) {
		Paint paint = new Paint();
		// 设置画笔颜色
		paint.setColor(color);
		// 设置字体大小
		paint.setTextSize(20);
		paint.setStyle(Style.FILL);
		paint.setTextAlign(Paint.Align.CENTER);
		float widthCenter = getMeasuredWidth() / 2;
		if (l.length > 0) {
			float height = getMeasuredHeight() / l.length;
			for (int i = 0; i < l.length; i++) {

				canvas.drawText(String.valueOf(l[i]), widthCenter, (i + 1)
						* height, paint);
			}
		}
		this.invalidate();
		super.onDraw(canvas);
	}

	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', '#' };
	}

	private ListView list;

	public void setListView(ListView _list) {
		list = _list;
		MyAdapter adapter = (MyAdapter) _list.getAdapter();
		sectionIndexter = (SectionIndexer) adapter;

	}

	public void setTextView(TextView mDialogText) {
		this.mDialogText = mDialogText;
	}

	/***********************************************************/

	public boolean onTouchEvent(MotionEvent event) {

		super.onTouchEvent(event);
		int i = (int) event.getY();
		/* 字母条索引 */
		int idx = i / (getMeasuredHeight() / l.length);
		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) {
			setBackgroundResource(R.drawable.scrollbar_bg);
			// 字母条的背景
			mDialogText.setVisibility(View.VISIBLE);
			if (idx == 0) {
				mDialogText.setText("Search");
				mDialogText.setTextSize(16);
			} else {
				mDialogText.setText(String.valueOf(l[idx]));
				mDialogText.setTextSize(34);
			}
			int position = sectionIndexter.getPositionForSection(l[idx]);

			if (position == -1) {
				return true;
			}
			list.setSelection(position);
		} else {
			mDialogText.setVisibility(View.INVISIBLE);

		}
		if (event.getAction() == MotionEvent.ACTION_UP) {
			setBackgroundDrawable(new ColorDrawable(0x00000000));
		}
		return true;
	}

}

Content

package com.example.listsildedel;

public class Content {

	private String letter;
	private String name;
	
		
	
	public Content(String letter, String name) {
		super();
		this.letter = letter;
		this.name = name;
	}
	public String getLetter() {
		return letter;
	}
	public void setLetter(String letter) {
		this.letter = letter;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	
}
PinyinComparator

package com.example.listsildedel;

import java.util.Comparator;

public class PinyinComparator implements Comparator<Content> {

	public int compare(Content o1, Content o2) {
//		if (o1.getLetter().equals("@")
//				|| o2.getLetter().equals("#")) {
//			return -1;
//		} else if (o1.getLetter().equals("#")
//				|| o2.getLetter().equals("@")) {
//			return 1;
//		} else {
//		}
		return o1.getLetter().compareTo(o2.getLetter());
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值