@Override public View getView(int position, View convertView, ViewGroup parent) { final int contactTileAdapterCount = mContactTileAdapter.getCount(); final int contactEntryListAdapterCount = mContactEntryListAdapter.getCount(); // Obtain a View relevant for that position, and adjust its horizontal padding. Each // View has different implementation, so we use different way to control those padding. if (position < contactTileAdapterCount) { // For "tile" and "frequent" sections final View view = mContactTileAdapter.getView(position, convertView, parent); final int frequentHeaderPosition = mContactTileAdapter.getFrequentHeaderPosition(); if (position < frequentHeaderPosition) { // "starred" contacts // No padding adjustment. } else if (position == frequentHeaderPosition) { view.setPadding( mItemPaddingLeft, mFrequentHeaderPaddingTop, mItemPaddingRight, view.getPaddingBottom()); } else { // Views for "frequent" contacts use FrameLayout's margins instead of padding. final FrameLayout frameLayout = (FrameLayout) view; final View child = frameLayout.getChildAt(0); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); params.setMargins(mItemPaddingLeft, 0, mItemPaddingRight, 0); child.setLayoutParams(params); } return view; } else if (position == contactTileAdapterCount) { // For "all" section's account header mAccountFilterHeaderContainer.setPadding( mItemPaddingLeft, mAccountFilterHeaderContainer.getPaddingTop(), mItemPaddingRight, mAccountFilterHeaderContainer.getPaddingBottom()); // Show a single "No Contacts" label under the "all" section account header // if no contacts are displayed. mAccountFilterHeaderContainer .findViewById(R.id.contact_list_all_empty) .setVisibility(contactEntryListAdapterCount == 0 ? View.VISIBLE : View.GONE); return mAccountFilterHeaderContainer; } else { // For "all" section if (mContactEntryListAdapter.isLoading()) { // "All" section is being loaded. mLoadingView.setPadding( mItemPaddingLeft, mLoadingView.getPaddingTop(), mItemPaddingRight, mLoadingView.getPaddingBottom()); return mLoadingView; } else { // "-1" for mAccountFilterHeaderContainer final int localPosition = position - contactTileAdapterCount - 1; final ContactListItemView itemView = (ContactListItemView) mContactEntryListAdapter.getView(localPosition, convertView, null); itemView.setPadding( mItemPaddingLeft, itemView.getPaddingTop(), mItemPaddingRight, itemView.getPaddingBottom()); itemView.setSelectionBoundsHorizontalMargin(mItemPaddingLeft, mItemPaddingRight); return itemView; } } }