Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 如何獲取android手機聯系人並按字母展示(一)

如何獲取android手機聯系人並按字母展示(一)

編輯:關於Android編程

android提供了本地數據庫的查詢uri,可以查詢出數據:

采用一個AsyncQueryHandler來進行查詢, AsyncQueryHandler自己開啟了線程來進行數據查詢,很方便


protected AsyncQueryHandler mQueryHandler;

protected final void queryPersonal() {
		mQueryHandler.startQuery(QUERY_TOKEN, null, ContactsContract.Contacts.CONTENT_URI, 
				Personal.CONTACTS_SUMMARY_PROJECTION, null, null, getSortOrder(ContactsContract.Contacts.DISPLAY_NAME));
	}

	
	protected static String getSortOrder(String fieldName) {
		//substr為截取函數,取第一個字母
		//COLLATE主要用於對字符進行排
		//COLLATE LOCALIZED 按本地語言進行排序
		return "CASE WHEN substr(UPPER(" + fieldName + "), 1, 1) BETWEEN 'A' AND 'Z' THEN 1 else 10 END," +
				fieldName + " COLLATE LOCALIZED ASC";
	}

protected final class MyHandler extends AsyncQueryHandler { 
		/**
		 * Asynchronous query handler constructor.
		 */
		public MyHandler(Context context) {
			super(context.getContentResolver());
		}
		
		/**
		 * On query completion.
		 */
		@Override
		protected void onQueryComplete(int token, Object cookie, Cursor cursor) { //handler查詢完的回調
			if (cursor == null || cursor.isClosed()) {
				return;
			}
			if (!isFinishing()) {
				setLoading(false);
				if (mAdapter != null) {
					mAdapter.setLoading(false);
					mAdapter.changeCursor(cursor);
				} 
				
				if (cursor.getCount() == 0) {
					mEmtytext.setVisibility(View.VISIBLE);
				} else {
					mEmtytext.setVisibility(View.INVISIBLE);
				}
			} else {
				if (cursor != null && !cursor.isClosed()) {
					cursor.close();
				}
			}
		}
	}

這個Layout是:





    

    

        

        
    



然後是list adapter的寫法:

	protected static final class SectionedContactListItemCache {
		public TextView sectionHeader;
		public TextView nameView;
		public TextView typeView;
		public ImageView photoView;
		public ImageView detailItemIcon;
        	public View nameTypeWrapper;
	}
	
	
	protected final class ContactsAdapter extends ResourceCursorAdapter  {


		
		public ContactsAdapter(Context context) {
			super(context, R.layout.contacts_list_item_photo,null);
		}

		
		@Override
		public void changeCursor(Cursor c) {
			super.changeCursor(c);
		}
		
		protected String getTitle(String displayName) {
			String title;
			/** check if the first letter is English letter */
			Matcher matcher = mPattern.matcher(displayName);
			if (!matcher.find()) {
				title = NONE_ENGLISH_LETTER_TITLE;
			} else {
				title = displayName.trim().substring(0, 1).toUpperCase(Locale.US);
			}
			return title;
		}
		
		protected String getDisplayName(Cursor c) {
			
			String displayName =  c.getString(Personal.NAME_COLUMN_INDEX);
					
			if(TextUtils.isEmpty(displayName)) {
				return "";
			}
			
			return displayName;
		}
		


		@Override
		public void bindView(View view, Context context, Cursor cursor) {
			final SectionedContactListItemCache cache = (SectionedContactListItemCache) view.getTag();
			cache.typeView.setVisibility(View.GONE);
			cache.photoView.setVisibility(View.VISIBLE);
			String name = cursor.getString(Personal.NAME_COLUMN_INDEX);
			if (TextUtils.isEmpty(name)) {
				cache.nameView.setText(R.string.contact_no_name);
			} else {
				cache.nameView.setText(name);
			}
		}
		
		
		@Override
		public View newView(Context context, Cursor cursor, ViewGroup parent) {
			
			View view = super.newView(context, cursor, parent);
			final SectionedContactListItemCache cache = new SectionedContactListItemCache();
            cache.nameTypeWrapper = view.findViewById(R.id.name_type);
			cache.sectionHeader = (TextView) view.findViewById(R.id.txtSectionHeader);
			cache.nameView = (TextView) view.findViewById(R.id.name);
			cache.typeView = (TextView) view.findViewById(R.id.type);
			cache.photoView = (ImageView) view.findViewById(R.id.photo);
			cache.detailItemIcon = (ImageView) view.findViewById(R.id.contacts_detail_item_icon);
			view.setTag(cache);
			
			return view;
		}
		
		
	}//end of adapter

item adapter的layout:




    

    

        

        

        

        

            

            
        
    



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved