Android連絡人姓氏提示

來源:互聯網
上載者:User

自己用著M1S,感覺裡面的連絡人姓氏提示功能不錯,用起來挺好的,就自己做了個比較簡單的類似於這樣的功能,代碼如下:

package com.fnd.ui;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.os.Bundle;import android.os.Handler;import android.app.Activity;import android.content.Context;import android.view.LayoutInflater;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;public class MainActivity extends Activity {private TextView tv_displayfamilyname;private ListView lv_displaylinkman;private String[] linkmanStrings = new String[] { "塗bing", "劉", "張fa", "徐","美", "郭", "王", "趙", "燕", "平三", "汗", "好哈", "新", "塗", "二", "三", "八戒","猴哥", "鐘", "雨", "填", "張", "塗", "劉", "張", "徐", "美", "郭", "王", "趙","燕", "平", "汗", "好哈", "新", "塗", "二", "三", "八戒", "猴哥", "鐘", "雨", "填","張", "塗", "劉", "張", "徐", "美", "郭", "王", "趙", "燕", "平", "汗", "好哈","新", "塗", "二", "三", "八戒", "猴哥", "鐘", "雨", "填", "張" };private String firstdisplaystring;private boolean isshowing;private String predisplaystring;private Runnable displayrunnable;private int displaycount = 0;Handler handler = new Handler();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv_displayfamilyname = (TextView) findViewById(R.id.tv_displayfamilyname);lv_displaylinkman = (ListView) findViewById(R.id.lv_displaylinkman);//給ListView添加一個滾動監聽器lv_displaylinkman.setOnScrollListener(new DisplayLinkmanOnScrollListener());List<Map<String, Object>> stringlist = new ArrayList<Map<String, Object>>();for (String str : linkmanStrings) {Map<String, Object> map = new HashMap<String, Object>();map.put("name", str);stringlist.add(map);}ListItemAdapter lia = new ListItemAdapter(MainActivity.this,stringlist, R.layout.ll_lvdisplaylinkman_item,new String[] { "name" }, new int[] { R.id.tv_item });lv_displaylinkman.setAdapter(lia);tv_displayfamilyname.setVisibility(View.INVISIBLE);displayrunnable = new DisplayRunnable();}final class DisplayLinkmanOnScrollListener implements OnScrollListener {//儲存當前屏最上層Item在ListView中的位置private int firstVisibleItem = 0;@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {this.firstVisibleItem = firstVisibleItem;}@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {switch (scrollState) {case OnScrollListener.SCROLL_STATE_IDLE://當滑動停止// 提取出姓氏(當前屏中間Item)firstdisplaystring = linkmanStrings[firstVisibleItem+ displaycount / 2].substring(0, 1);if (!isshowing && !firstdisplaystring.equals(predisplaystring)) {tv_displayfamilyname.setVisibility(View.VISIBLE);isshowing = true;}tv_displayfamilyname.setText(firstdisplaystring);//移除當前訊息佇列Runnablehandler.removeCallbacks(displayrunnable);//添加新的訊息佇列Runnablehandler.postDelayed(displayrunnable, 2000);break;}}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}final class DisplayRunnable implements Runnable {@Overridepublic void run() {isshowing = false;tv_displayfamilyname.setVisibility(View.INVISIBLE);}}final class ListItemAdapter extends SimpleAdapter {LayoutInflater mInflater;List<Map<String, Object>> stringlist;public ListItemAdapter(Context context,List<Map<String, Object>> stringlist, int resource,String[] from, int[] to) {super(context, stringlist, resource, from, to);mInflater = LayoutInflater.from(context);this.stringlist = stringlist;}@Overridepublic int getCount() {return super.getCount();}@Overridepublic Object getItem(int position) {return super.getItem(position);}@Overridepublic long getItemId(int position) {return super.getItemId(position);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = mInflater.inflate(R.layout.ll_lvdisplaylinkman_item, null);holder = new ViewHolder();holder.name = (TextView) convertView.findViewById(R.id.tv_item);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}System.out.println("position:" + position);System.out.println("stringlist size:" + stringlist.size());int lv_height = lv_displaylinkman.getHeight();int item_height = convertView.getHeight();System.out.println("lv_height:" + lv_height);System.out.println("item_height:" + item_height);// 算出手機一屏顯示ListView Item的個數if (item_height != 0) {displaycount = lv_height / item_height;}holder.name.setText((String) stringlist.get(position).get("name"));return convertView;}}static class ViewHolder {TextView name;}}

上面只實現了非常簡單的功能,有興趣的話可以實現非常豐富的功能。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.