1. 程式人生 > >Android 高仿QQ 好友分組列表

Android 高仿QQ 好友分組列表

本帖最後由 憤怒的小鳥 於 2012-11-4 10:53 編輯

實現的效果如下:
1351748461_9838.png 
用ExpandableListView實現,
先看Activity的程式碼:
  1. public class BuddyActivity extends Activity { 
  2.     ExpandableListView expandablelistview;  
  3.     //群組名稱     
  4.     private String[] group = new String[] { "線上好友", "我的好友", "我的同事"};    
  5.     //好友名稱     
  6.     private String[][] buddy = new String[][] {  
  7.             { "元芳", "雷丶小賤", "狄大人"},   
  8.             {"高太后", "士兵甲", "士兵乙", "士兵丙" },  
  9.             { "藝術家", "叫獸", "攻城師", "職業玩家" }};    
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  13.         setContentView(R.layout.activity_buddy);  
  14.         expandablelistview= (ExpandableListView) findViewById(R.id.buddy_expandablelistview);  
  15.         ExpandableListAdapter adapter=new BuddyAdapter(this,group,buddy);  
  16.         expandablelistview.setAdapter(adapter);  
  17.         //分組展開  
  18.         expandablelistview.setOnGroupExpandListener(new OnGroupExpandListener(){  
  19.             public void onGroupExpand(int groupPosition) {  
  20.             }  
  21.         });  
  22.         //分組關閉  
  23.         expandablelistview.setOnGroupCollapseListener(new OnGroupCollapseListener(){  
  24.             public void onGroupCollapse(int groupPosition) {  
  25.             }  
  26.         });  
  27.         //子項單擊  
  28.         expandablelistview.setOnChildClickListener(new OnChildClickListener(){  
  29.             public boolean onChildClick(ExpandableListView arg0, View arg1,  
  30.                     int groupPosition, int childPosition, long arg4) {  
  31.                 Toast.makeText(BuddyActivity.this,   
  32.                         group[groupPosition]+" : "+buddy[groupPosition][childPosition],   
  33.                         Toast.LENGTH_SHORT).show();  
  34.                 return false;  
  35.             }  
  36.         });  
  37.     }  
  38. }  
複製程式碼 ExpandableListView的佈局有2個,分別是組的佈局和子項(即好友),先看buddy_listview_group_item.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/RelativeLayout1"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="30dip"   
  6.     android:background="@drawable/group_fold_bg">  
  7.     <ImageView  
  8.         android:id="@+id/buddy_listview_image"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_alignParentLeft="true"  
  12.         android:layout_centerVertical="true"  
  13.         android:layout_marginLeft="10dp"  
  14.         android:src="@drawable/group_fold_arrow" />  
  15.     <TextView  
  16.         android:id="@+id/buddy_listview_group_name"  
  17.         android:layout_width="wrap_content"  
  18.         android:layout_height="wrap_content"  
  19.         android:layout_centerVertical="true"  
  20.         android:layout_alignTop="@+id/buddy_listview_image"  
  21.         android:layout_toRightOf="@+id/buddy_listview_image"  
  22.         android:text="分組名稱" />  
  23.     <TextView  
  24.         android:id="@+id/buddy_listview_group_num"  
  25.         android:layout_width="wrap_content"  
  26.         android:layout_height="wrap_content"  
  27.         android:layout_alignParentRight="true"  
  28.         android:layout_centerVertical="true"  
  29.         android:layout_marginRight="10dp"  
  30.         android:text="[10/10]" />  
  31. </RelativeLayout>  
複製程式碼 下面是buddy_listview_child_item.xml
  1.     <?xml version="1.0" encoding="utf-8"?>  
  2.     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.         android:layout_width="match_parent"  
  4.         android:layout_height="40dip" >  
  5.         <ImageView  
  6.             android:id="@+id/buddy_listview_child_avatar"  
  7.             android:layout_width="40dip"  
  8.             android:layout_height="40dip"  
  9.             android:layout_alignParentLeft="true"  
  10.             android:layout_alignParentTop="true"  
  11.             android:layout_marginLeft="10dp"  
  12.             android:src="@drawable/avatar" />  
  13.         <TextView  
  14.             android:id="@+id/buddy_listview_child_nick"  
  15.             android:layout_width="wrap_content"  
  16.             android:layout_height="wrap_content"  
  17.             android:layout_alignParentTop="true"  
  18.             android:layout_toRightOf="@+id/buddy_listview_child_avatar"  
  19.             android:text="暱稱"  
  20.             android:textSize="16sp" />  
  21.         <TextView  
  22.             android:id="@+id/buddy_listview_child_trends"  
  23.             android:layout_width="wrap_content"  
  24.             android:layout_height="wrap_content"  
  25.             android:layout_alignLeft="@+id/buddy_listview_child_nick"  
  26.             android:layout_alignParentBottom="true"  
  27.             android:text="該好友暫時沒有新動態"  
  28.             android:textSize="12sp" />  
  29.     </RelativeLayout>  
複製程式碼 Adapter自然是對應的BaseExpandableListAdapter
  1. public class BuddyAdapter extends BaseExpandableListAdapter {     
  2.     private String[] group;   
  3.     private String[][] buddy;  
  4.     private Context context;  
  5.     LayoutInflater inflater;  
  6.     public BuddyAdapter(Context context,String[] group,String[][] buddy){  
  7.         this.context=context;  
  8.         inflater = LayoutInflater.from(context);  
  9.         this.group=group;  
  10.         this.buddy=buddy;  
  11.     }  
  12.     public Object getChild(int groupPosition, int childPosition) {  
  13.         return buddy[groupPosition][childPosition];  
  14.     }  
  15.     public long getChildId(int groupPosition, int childPosition) {  
  16.         return childPosition;  
  17.     }  
  18.     public View getChildView(int groupPosition, int childPosition, boolean arg2, View convertView,  
  19.             ViewGroup arg4) {  
  20.         convertView = inflater.inflate(R.layout.buddy_listview_child_item, null);  
  21.         TextView nickTextView=(TextView) convertView.findViewById(R.id.buddy_listview_child_nick);  
  22.         nickTextView.setText(getChild(groupPosition, childPosition).toString());  
  23.         return convertView;  
  24.     }  
  25.     public int getChildrenCount(int groupPosition) {  
  26.         return buddy[groupPosition].length;  
  27.     }  
  28.     public Object getGroup(int groupPosition) {  
  29.         return group[groupPosition];  
  30.     }  
  31.     public int getGroupCount() {  
  32.         return group.length;  
  33.     }  
  34.     public long getGroupId(int groupPosition) {  
  35.         return groupPosition;  
  36.     }  
  37.     public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup arg3) {  
  38.         convertView = inflater.inflate(R.layout.buddy_listview_group_item, null);  
  39.         TextView groupNameTextView=(TextView) convertView.findViewById(R.id.buddy_listview_group_name);  
  40.         groupNameTextView.setText(getGroup(groupPosition).toString());  
  41.         ImageView image = (ImageView) convertView.findViewById(R.id.buddy_listview_image);  
  42.         image.setImageResource(R.drawable.group_unfold_arrow);  
  43.         //更換展開分組圖片  
  44.         if(!isExpanded){  
  45.             image.setImageResource(R.drawable.group_fold_arrow);  
  46.         }  
  47.         return convertView;  
  48.     }  
  49.     public boolean hasStableIds() {  
  50.         return true;  
  51.     }  
  52.     // 子選項是否可以選擇    
  53.     public boolean isChildSelectable(int arg0, int arg1) {  
  54.         // TODO Auto-generated method stub  
  55.         return true;  
  56.     }  
  57. }  
複製程式碼