package com.netease.nim.uikit.common.ui.liv; import android.view.View; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.netease.nim.uikit.common.ui.liv.LetterIndexView.OnTouchingLetterChangedListener; import java.util.Map; /** * 字母导航,点击字母,列表滑动到指定字母集合上。 * * @author huangjun */ public class LivIndex { private final ListView lvContacts; private final LetterIndexView livIndex; private final TextView lblLetterHit; private final ImageView imgBackLetter; private final Map<String, Integer> mapABC; // 字母:所在的行的index public LivIndex(ListView contactsListView, LetterIndexView letterIndexView, TextView letterHit, ImageView imgBackLetter, Map<String, Integer> abcMap) { this.lvContacts = contactsListView; this.livIndex = letterIndexView; this.lblLetterHit = letterHit; this.imgBackLetter = imgBackLetter; this.mapABC = abcMap; this.livIndex.setOnTouchingLetterChangedListener(new LetterChangedListener()); } /** * 显示 */ public void show() { this.livIndex.setVisibility(View.VISIBLE); } /** * 隐藏 */ public void hide() { this.livIndex.setVisibility(View.GONE); } private class LetterChangedListener implements OnTouchingLetterChangedListener { @Override public void onHit(String letter) { lblLetterHit.setVisibility(View.VISIBLE); imgBackLetter.setVisibility(View.VISIBLE); lblLetterHit.setText(letter); int index = -1; if ("↑".equals(letter)) { index = 0; } else if (mapABC.containsKey(letter)) { index = mapABC.get(letter); } if (index < 0) { return; } index += lvContacts.getHeaderViewsCount(); if (index >= 0 && index < lvContacts.getCount()) { lvContacts.setSelectionFromTop(index, 0); } } @Override public void onCancel() { lblLetterHit.setVisibility(View.INVISIBLE); imgBackLetter.setVisibility(View.INVISIBLE); } } }