android 字母索引三方,Android开发实例:列表字母索引和过滤检索

这是一个Android应用中实现城市选择器的代码示例。通过ListView显示城市列表,并使用EditText进行过滤搜索。同时,实现了滚动时显示当前首字母的悬浮窗效果。在onTextChanged事件中动态更新列表,并在onScroll中处理滚动时的索引显示。
摘要由CSDN通过智能技术生成

packagecom.Johnson.index;

importjava.util.ArrayList;

importandroid.app.Activity;

importandroid.content.Context;

importandroid.graphics.PixelFormat;

importandroid.os.Bundle;

importandroid.os.Handler;

importandroid.text.Editable;

importandroid.text.TextWatcher;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.view.WindowManager;

importandroid.view.WindowManager.LayoutParams;

importandroid.widget.AbsListView;

importandroid.widget.AdapterView;

importandroid.widget.BaseAdapter;

importandroid.widget.EditText;

importandroid.widget.ListView;

importandroid.widget.TextView;

importandroid.widget.Toast;

/**

*

* 城市选择 activity

*

* @author Johnson

*

*/

publicclassCitySelectActivityextendsActivityimplements

ListView.OnScrollListener {

// 城市选择

privateListView listView;

privateArrayList listBasicData =newArrayList();// 存放原始数据;

privateArrayList list =newArrayList();// 存放临时数据

privateLayoutInflater mInflater;

privateRemoveWindow mRemoveWindow =newRemoveWindow();

privateWindowManager mWindowManager;

privateTextView mDialogText;

privatebooleanmShowing;

privatebooleanmReady;

privateString mPrevLetter ="";

privateEditText filterEdit;

Handler mHandler =newHandler();

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//原始数据

listBasicData = City.getCityList();

//初始化显示数据加入字幕索引item

initShowData();

this.setContentView(R.layout.city_select);

mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

listView = (ListView) findViewById(R.id.list_view);

finalmyAdapter adapter =newmyAdapter();

listView.setAdapter(adapter);

listView.setItemsCanFocus(false);

listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);// 设置单选模型

listView.setOnItemClickListener(newAdapterView.OnItemClickListener() {

@Override

publicvoidonItemClick(AdapterView> parent, View view,

intposition,longid) {

Toast.makeText(getApplicationContext(), list.get(position).getCityName(), Toast.LENGTH_SHORT).show();

}

});

filterEdit = (EditText) findViewById(R.id.edit_filter);

filterEdit.addTextChangedListener(newTextWatcher() {

publicvoidonTextChanged(CharSequence s,intstart,intbefore,

intcount) {

}

publicvoidbeforeTextChanged(CharSequence s,intstart,intcount,

intafter) {

}

publicvoidafterTextChanged(Editable s) {

finalString txt = s.toString().toLowerCase();

if(list !=null) {

list.clear();

if(listBasicData !=null&& listBasicData.size() >0) {

for(City mCity : listBasicData) {

String pinyin = mCity.getCityPinyin();

String name = mCity.getCityName();

if(pinyin.startsWith(txt)

|| pinyin.startsWith(txt.toLowerCase())

|| pinyin.startsWith(txt.toUpperCase())

|| (name.indexOf(txt) != -1)) {

list.add(mCity);

}

}

if("".equals(txt)) {

//当字母过滤框内容为空重新初始化数据

initShowData();

}

if("".equals(txt)) {

mReady =true;

}else{

mReady =false;

}

// List数据变化时, 刷新Dialog

// dialog.notifyDataSetChanged();

adapter.notifyDataSetChanged();

}

}

}

});

initIndexTextView();

}

@Override

publicvoidonScroll(AbsListView view,intfirstVisibleItem,

intvisibleItemCount,inttotalItemCount) {

intvisibleItemIndex = firstVisibleItem;

// int visibleItemIndex = firstVisibleItem + (visibleItemCount / 2 - 1);

if(mReady) {

City city = (City) list.get(visibleItemIndex);

String firstLetter = city.getCityPinyin();

System.out.println("@"+ firstLetter);

if(firstLetter.equals("-")) {

firstLetter = firstLetter.substring(1,2);

}else{

firstLetter = firstLetter.substring(0,1);

}

if(!mShowing && firstLetter.equals(mPrevLetter)) {

mShowing =true;

mDialogText.setVisibility(View.VISIBLE);

}

mDialogText.setTextSize(40);

mDialogText.setText(firstLetter);

mHandler.removeCallbacks(mRemoveWindow);

mHandler.postDelayed(mRemoveWindow,1000);

mPrevLetter = firstLetter;

}

}

@Override

publicvoidonScrollStateChanged(AbsListView arg0,intarg1) {

// TODO Auto-generated method stub

}

privatevoidremoveWindow() {

if(mShowing) {

mShowing =false;

mDialogText.setVisibility(View.INVISIBLE);

}

}

privatefinalclassRemoveWindowimplementsRunnable {

publicvoidrun() {

removeWindow();

}

}

@Override

protectedvoidonResume() {

super.onResume();

mReady =true;

}

@Override

protectedvoidonPause() {

super.onPause();

removeWindow();

mReady =false;

}

@Override

protectedvoidonDestroy() {

super.onDestroy();

if(mWindowManager !=null) {

mWindowManager.removeView(mDialogText);

}

mReady =false;

}

classmyAdapterextendsBaseAdapter {

View convertView;

City city;

@Override

publicbooleanisEnabled(intposition) {

if(city !=null) {

return!city.getCityName().startsWith("-");

}else{

returntrue;

}

}

@Override

publicintgetCount() {

// TODO Auto-generated method stub

returnlist.size();

}

@Override

publicObject getItem(intposition) {

// TODO Auto-generated method stub

returnlist.get(position);

}

@Override

publiclonggetItemId(intposition) {

// TODO Auto-generated method stub

returnposition;

}

@Override

publicView getView(intposition, View convertVie, ViewGroup arg2) {

// TODO Auto-generated method stub

convertView = convertVie;

TextView tv;

city = (City) list.get(position);

if(city.getCityName().startsWith("-")) {

convertView = mInflater.inflate(

R.layout.city_list_item_city_index,null);

tv = (TextView) convertView

.findViewById(R.id.city_list_item_city_index);

tv.setText(city.getCityName().substring(1,

city.getCityName().length()));

}else{

convertView = mInflater.inflate(R.layout.city_list_item_city,

null);

tv = (TextView) convertView

.findViewById(R.id.city_list_item_city);

tv.setText(city.getCityName());

}

returnconvertView;

}

}

/**

* 初始化用于显示的数据

*

* @author johnson

*

* */

publicvoidinitShowData() {

list.clear();

list = Utils.rebuildList(listBasicData);

}

/**

* 初始化程序列表索引IndexTextView

*

* @author johnson

* */

publicvoidinitIndexTextView() {

mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);

listView.setOnScrollListener(this);

mDialogText = (TextView) mInflater

.inflate(R.layout.list_position,null);

mDialogText.setVisibility(View.INVISIBLE);

mHandler.post(newRunnable() {

publicvoidrun() {

mReady =true;

WindowManager.LayoutParams lp =newWindowManager.LayoutParams(

LayoutParams.WRAP_CONTENT,

LayoutParams.WRAP_CONTENT,

WindowManager.LayoutParams.TYPE_APPLICATION_STARTING,

WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE

| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,

PixelFormat.TRANSLUCENT);

mWindowManager.addView(mDialogText, lp);

}

});

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值