Android中实现类似qq好友列表展开收起的效果

1.  fragment_cars_list.xml

[html] view plain copy
  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="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <ExpandableListView  
  8.         android:id="@+id/android_list"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="wrap_content" />  
  11.   
  12.     <TextView  
  13.         android:id="@+id/tv_load_more"  
  14.         android:layout_width="wrap_content"  
  15.         android:layout_height="wrap_content"  
  16.         android:layout_below="@+id/android_list"  
  17.         android:layout_centerHorizontal="true"  
  18.         android:padding="20dp"  
  19.         android:text="@string/load_more" />  
  20.   
  21. </RelativeLayout>  
2. group.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <LinearLayout  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="wrap_content" >  
  10.   
  11.         <ImageView  
  12.             android:id="@+id/iv_selector"  
  13.             android:layout_width="wrap_content"  
  14.             android:layout_height="wrap_content"  
  15.             android:layout_margin="5dp" />  
  16.   
  17.         <TextView  
  18.             android:id="@+id/tv_group"  
  19.             android:layout_width="match_parent"  
  20.             android:layout_height="wrap_content"  
  21.             android:paddingBottom="6dp"  
  22.             android:paddingLeft="10dp"  
  23.             android:paddingTop="6dp"  
  24.             android:text="@string/list"  
  25.             android:textSize="15sp" />  
  26.     </LinearLayout>  
  27.   
  28. </LinearLayout>  
3.  child.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <TextView  
  8.         android:id="@+id/tv_child"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="fill_parent"  
  11.         android:paddingBottom="10dp"  
  12.         android:paddingLeft="60dp"  
  13.         android:paddingTop="10dp"  
  14.         android:text="好友列表"  
  15.         android:textSize="20sp" />  
  16.   
  17. </LinearLayout>  
4.  BuddyAdapter.java

[java] view plain copy
  1. public class BuddyAdapter extends BaseExpandableListAdapter {  
  2.   
  3.     private String[] group;  
  4.     private String[] buddy;  
  5.     private Context context;  
  6.     private LayoutInflater inflater;  
  7.   
  8.     public BuddyAdapter(String[] group, String[] buddy, Context context) {  
  9.         super();  
  10.         this.group = group;  
  11.         this.buddy = buddy;  
  12.         this.context = context;  
  13.         inflater = LayoutInflater.from(context);  
  14.     }  
  15.   
  16.     @Override  
  17.     public int getGroupCount() {  
  18.         return group.length;  
  19.     }  
  20.   
  21.     @Override  
  22.     public int getChildrenCount(int groupPosition) {  
  23.         return buddy.length;  
  24.     }  
  25.   
  26.     @Override  
  27.     public Object getGroup(int groupPosition) {  
  28.         return group[groupPosition];  
  29.     }  
  30.   
  31.     @Override  
  32.     public Object getChild(int groupPosition, int childPosition) {  
  33.   
  34.         return buddy[childPosition];  
  35.     }  
  36.   
  37.     @Override  
  38.     public long getGroupId(int groupPosition) {  
  39.         return groupPosition;  
  40.     }  
  41.   
  42.     @Override  
  43.     public long getChildId(int groupPosition, int childPosition) {  
  44.         return childPosition;  
  45.     }  
  46.   
  47.     @Override  
  48.     public boolean hasStableIds() {  
  49.         return true;  
  50.     }  
  51.   
  52.     @Override  
  53.     public View getGroupView(int groupPosition, boolean isExpanded,  
  54.             View convertView, ViewGroup parent) {  
  55.         convertView = inflater.inflate(R.layout.group, null);  
  56.         TextView groupNameTextView = (TextView) convertView  
  57.                 .findViewById(R.id.tv_group);  
  58.         ImageView ivSelector = (ImageView) convertView  
  59.                 .findViewById(R.id.iv_selector);  
  60.         groupNameTextView.setText(getGroup(groupPosition).toString());  
  61.         ivSelector.setImageResource(R.drawable.selector_close);  
  62.   
  63.         // 更换展开分组图片  
  64.         if (!isExpanded) {  
  65.             ivSelector.setImageResource(R.drawable.selector);  
  66.         }  
  67.         return convertView;  
  68.     }  
  69.   
  70.     @Override  
  71.     public View getChildView(int groupPosition, int childPosition,  
  72.             boolean isLastChild, View convertView, ViewGroup parent) {  
  73.         convertView = inflater.inflate(R.layout.child, null);  
  74.         TextView nickTextView = (TextView) convertView  
  75.                 .findViewById(R.id.tv_child);  
  76.   
  77.         nickTextView.setText(getChild(groupPosition, childPosition).toString());  
  78.   
  79.         return convertView;  
  80.     }  
  81.   
  82.     // 子选项是否可以选择  
  83.     @Override  
  84.     public boolean isChildSelectable(int groupPosition, int childPosition) {  
  85.         return true;  
  86.     }  
  87.   
  88. }  
4.   carListFragment.java

[java] view plain copy
  1. public class CarsListFragment extends Fragment {  
  2.   
  3.     private ExpandableListView elvCompany;  
  4.   
  5.     private TextView tvLoadMore;  
  6.   
  7.     // 群组名称(一级条目内容)  
  8.     private String[] group = new String[] { "我的好友" };  
  9.   
  10.     private String[] carsList = new String[] { "张三""李四""王五""赵六",  
  11.             "天气" };  
  12.   
  13.     @Override  
  14.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  15.             Bundle savedInstanceState) {  
  16.   
  17.         View view = inflater.inflate(R.layout.fragment_cars_list, null);  
  18.   
  19.         tvLoadMore = (TextView) view.findViewById(R.id.tv_load_more);  
  20.         elvCompany = (ExpandableListView) view.findViewById(R.id.android_list);  
  21.         BuddyAdapter adapter = new BuddyAdapter(group, carsList, getContext());  
  22.         elvCompany.setAdapter(adapter);  
  23.   
  24.         setListeners();  
  25.   
  26.         return view;  
  27.     }  
  28.   
  29.     private void setListeners() {  
  30.         // 分组展开  
  31.         elvCompany.setOnGroupClickListener(new OnGroupClickListener() {  
  32.   
  33.             @Override  
  34.             public boolean onGroupClick(ExpandableListView parent, View v,  
  35.                     int groupPosition, long id) {  
  36.                 return false;  
  37.             }  
  38.         });  
  39.         // 分组关闭  
  40.         elvCompany.setOnGroupCollapseListener(new OnGroupCollapseListener() {  
  41.   
  42.             @Override  
  43.             public void onGroupCollapse(int groupPosition) {  
  44.   
  45.             }  
  46.         });  
  47.   
  48.         // 子项点击  
  49.         elvCompany.setOnChildClickListener(new OnChildClickListener() {  
  50.   
  51.             @Override  
  52.             public boolean onChildClick(ExpandableListView parent, View v,  
  53.                     int groupPosition, int childPosition, long id) {  
  54.                 Toast.makeText(getActivity(),  
  55.                         group[groupPosition] + ":" + carsList[childPosition],  
  56.                         Toast.LENGTH_SHORT).show();  
  57.                 return false;  
  58.             }  
  59.         });  
  60.   
  61.         tvLoadMore.setOnClickListener(new OnClickListener() {  
  62.   
  63.             @Override  
  64.             public void onClick(View v) {  
  65.                 Toast.makeText(getActivity(), "没有更多数据了", Toast.LENGTH_SHORT)  
  66.                         .show();  
  67.   
  68.             }  
  69.         });  
  70.   
  71.     }  
  72.   
  73. }  
运行之后,功能实现,但是会发现一个问题,在组列表左侧有一个默认的图标,如图所示:

原地址:http://www.open-open.com/lib/view/open1406014566679.html

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值