我们在进行Android开发时经常会用到列表字母索引和过滤检索,尤其是基于LBS的一些应用。在酒店达人、大众点评等应用中都能看到列表字母索引和过滤检索的使用。为了帮助大家开发,本文把列表字母索引和过滤检索的实例代码贴出来供大家参考,在实际使用时只需稍加修改即可。下面直接上代码。
Java代码
- package com.Johnson.index;
- import java.util.ArrayList;
- import android.app.Activity;
- import android.content.Context;
- import android.graphics.PixelFormat;
- import android.os.Bundle;
- import android.os.Handler;
- import android.text.Editable;
- import android.text.TextWatcher;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.WindowManager;
- import android.view.WindowManager.LayoutParams;
- import android.widget.AbsListView;
- import android.widget.AdapterView;
- import android.widget.BaseAdapter;
- import android.widget.EditText;
- import android.widget.ListView;
- import android.widget.TextView;
- import android.widget.Toast;
- /**
- *
- * 城市选择 activity
- *
- * @author Johnson
- *
- */
- public class CitySelectActivity extends Activity implements
- ListView.OnScrollListener {
- // 城市选择
- private ListView listView;
- private ArrayList<City> listBasicData = new ArrayList<City>();// 存放原始数据;
- private ArrayList<City> list = new ArrayList<City>();// 存放临时数据
- private LayoutInflater mInflater;
- private RemoveWindow mRemoveWindow = new RemoveWindow();
- private WindowManager mWindowManager;
- private TextView mDialogText;
- private boolean mShowing;
- private boolean mReady;
- private String mPrevLetter = "";
- private EditText filterEdit;
- Handler mHandler = new Handler();
- @Override
- protected void onCreate(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);
- final myAdapter adapter = new myAdapter();
- listView.setAdapter(adapter);
- listView.setItemsCanFocus(false);
- listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);// 设置单选模型
- listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- Toast.makeText(getApplicationContext(), list.get(position).getCityName(), Toast.LENGTH_SHORT).show();
- }
- });
- filterEdit = (EditText) findViewById(R.id.edit_filter);
- filterEdit.addTextChangedListener(new TextWatcher() {
- public void onTextChanged(CharSequence s, int start, int before,
- int count) {
- }
- public void beforeTextChanged(CharSequence s, int start, int count,
- int after) {
- }
- public void afterTextChanged(Editable s) {
- final String 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
- public void onScroll(AbsListView view, int firstVisibleItem,
- int visibleItemCount, int totalItemCount) {
- int visibleItemIndex = 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
- public void onScrollStateChanged(AbsListView arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- private void removeWindow() {
- if (mShowing) {
- mShowing = false;
- mDialogText.setVisibility(View.INVISIBLE);
- }
- }
- private final class RemoveWindow implements Runnable {
- public void run() {
- removeWindow();
- }
- }
- @Override
- protected void onResume() {
- super.onResume();
- mReady = true;
- }
- @Override
- protected void onPause() {
- super.onPause();
- removeWindow();
- mReady = false;
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- if (mWindowManager != null) {
- mWindowManager.removeView(mDialogText);
- }
- mReady = false;
- }
- class myAdapter extends BaseAdapter {
- View convertView;
- City city;
- @Override
- public boolean isEnabled(int position) {
- if (city != null) {
- return !city.getCityName().startsWith("-");
- } else {
- return true;
- }
- }
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return list.size();
- }
- @Override
- public Object getItem(int position) {
- // TODO Auto-generated method stub
- return list.get(position);
- }
- @Override
- public long getItemId(int position) {
- // TODO Auto-generated method stub
- return position;
- }
- @Override
- public View getView(int position, 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());
- }
- return convertView;
- }
- }
- /**
- * 初始化用于显示的数据
- *
- * @author johnson
- *
- * */
- public void initShowData() {
- list.clear();
- list = Utils.rebuildList(listBasicData);
- }
- /**
- * 初始化程序列表索引IndexTextView
- *
- * @author johnson
- * */
- public void initIndexTextView() {
- mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
- listView.setOnScrollListener(this);
- mDialogText = (TextView) mInflater
- .inflate(R.layout.list_position, null);
- mDialogText.setVisibility(View.INVISIBLE);
- mHandler.post(new Runnable() {
- public void run() {
- mReady = true;
- WindowManager.LayoutParams lp = new WindowManager.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);
- }
- });
- }
- }
本文发布:Android开发网
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。