package com.example.wechat01; import java.util.Arrays; import android.app.Activity; import android.content.Context; import android.graphics.PixelFormat; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout.LayoutParams; import android.widget.ListView; import android.widget.SectionIndexer; import android.widget.TextView; import com.example.wechat01.common.PingYinUtil; import com.example.wechat01.common.PinyinComparator; import com.example.wechat01.widght.SideBar; /** * 通讯录界面 * * @author allenjuns@yahoo.com * */ public class Fragment_Friends extends Fragment { private Activity ctx; private View layout, layout_head; private ListView lvContact; private SideBar indexBar; private TextView mDialogText; private WindowManager mWindowManager; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (layout == null) { ctx = this.getActivity(); layout = ctx.getLayoutInflater().inflate(R.layout.fragment_friends, null); initView(); } else { ViewGroup parent = (ViewGroup) layout.getParent(); if (parent != null) { parent.removeView(layout); } } return layout; } private void initView() { // TODO 实现本页面的布局 mWindowManager = (WindowManager) ctx .getSystemService(Context.WINDOW_SERVICE); lvContact = (ListView) layout.findViewById(R.id.lvContact); indexBar = (SideBar) layout.findViewById(R.id.sideBar); indexBar.setListView(lvContact); mDialogText = (TextView) LayoutInflater.from(getActivity()).inflate( R.layout.list_position, null); mDialogText.setVisibility(View.INVISIBLE); WindowManager.LayoutParams lp = new WindowManager.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_APPLICATION, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); mWindowManager.addView(mDialogText, lp); indexBar.setTextView(mDialogText); layout_head = ctx.getLayoutInflater().inflate( R.layout.layout_head_friend, null); lvContact.addHeaderView(layout_head); lvContact.setAdapter(new ContactAdapter(getActivity())); } static class ContactAdapter extends BaseAdapter implements SectionIndexer { private Context mContext; private String[] mNicks; @SuppressWarnings("unchecked") public ContactAdapter(Context mContext) { this.mContext = mContext; this.mNicks = nicks; // 排序(实现了中英文混排) Arrays.sort(mNicks, new PinyinComparator()); } @Override public int getCount() { return mNicks.length; } @Override public Object getItem(int position) { return mNicks[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final String nickName = mNicks[position]; ViewHolder viewHolder = null; if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate( R.layout.contact_item, null); viewHolder = new ViewHolder(); viewHolder.tvCatalog = (TextView) convertView .findViewById(R.id.contactitem_catalog); viewHolder.ivAvatar = (ImageView) convertView .findViewById(R.id.contactitem_avatar_iv); viewHolder.tvNick = (TextView) convertView .findViewById(R.id.contactitem_nick); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } String catalog = PingYinUtil.converterToFirstSpell(nickName) .substring(0, 1); if (position == 0) { viewHolder.tvCatalog.setVisibility(View.VISIBLE); viewHolder.tvCatalog.setText(catalog); } else { String lastCatalog = PingYinUtil.converterToFirstSpell( mNicks[position - 1]).substring(0, 1); if (catalog.equals(lastCatalog)) { viewHolder.tvCatalog.setVisibility(View.GONE); } else { viewHolder.tvCatalog.setVisibility(View.VISIBLE); viewHolder.tvCatalog.setText(catalog); } } viewHolder.ivAvatar.setImageResource(R.drawable.head); viewHolder.tvNick.setText(nickName); return convertView; } static class ViewHolder { TextView tvCatalog;// 目录 ImageView ivAvatar;// 头像 TextView tvNick;// 昵称 } @Override public int getPositionForSection(int section) { for (int i = 0; i < mNicks.length; i++) { String l = PingYinUtil.converterToFirstSpell(mNicks[i]) .substring(0, 1); char firstChar = l.toUpperCase().charAt(0); if (firstChar == section) { return i; } } return -1; } @Override public int getSectionForPosition(int position) { return 0; } @Override public Object[] getSections() { return null; } } /** * 昵称 */ private static String[] nicks = { "阿雅", "北风", "张山", "李四", "欧阳锋", "郭靖", "黄蓉", "杨过", "凤姐", "芙蓉姐姐", "移联网", "樱木花道", "风清扬", "张三丰", "梅超风" }; }