Android中实现类似qq好友列表展开收起的效果
1. fragment_cars_list.xml
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <ExpandableListView
- android:id="@+id/android_list"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- <TextView
- android:id="@+id/tv_load_more"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@+id/android_list"
- android:layout_centerHorizontal="true"
- android:padding="20dp"
- android:text="@string/load_more" />
- </RelativeLayout>
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content" >
- <ImageView
- android:id="@+id/iv_selector"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_margin="5dp" />
- <TextView
- android:id="@+id/tv_group"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingBottom="6dp"
- android:paddingLeft="10dp"
- android:paddingTop="6dp"
- android:text="@string/list"
- android:textSize="15sp" />
- </LinearLayout>
- </LinearLayout>
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/tv_child"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:paddingBottom="10dp"
- android:paddingLeft="60dp"
- android:paddingTop="10dp"
- android:text="好友列表"
- android:textSize="20sp" />
- </LinearLayout>
- public class BuddyAdapter extends BaseExpandableListAdapter {
- private String[] group;
- private String[] buddy;
- private Context context;
- private LayoutInflater inflater;
- public BuddyAdapter(String[] group, String[] buddy, Context context) {
- super();
- this.group = group;
- this.buddy = buddy;
- this.context = context;
- inflater = LayoutInflater.from(context);
- }
- @Override
- public int getGroupCount() {
- return group.length;
- }
- @Override
- public int getChildrenCount(int groupPosition) {
- return buddy.length;
- }
- @Override
- public Object getGroup(int groupPosition) {
- return group[groupPosition];
- }
- @Override
- public Object getChild(int groupPosition, int childPosition) {
- return buddy[childPosition];
- }
- @Override
- public long getGroupId(int groupPosition) {
- return groupPosition;
- }
- @Override
- public long getChildId(int groupPosition, int childPosition) {
- return childPosition;
- }
- @Override
- public boolean hasStableIds() {
- return true;
- }
- @Override
- public View getGroupView(int groupPosition, boolean isExpanded,
- View convertView, ViewGroup parent) {
- convertView = inflater.inflate(R.layout.group, null);
- TextView groupNameTextView = (TextView) convertView
- .findViewById(R.id.tv_group);
- ImageView ivSelector = (ImageView) convertView
- .findViewById(R.id.iv_selector);
- groupNameTextView.setText(getGroup(groupPosition).toString());
- ivSelector.setImageResource(R.drawable.selector_close);
- // 更换展开分组图片
- if (!isExpanded) {
- ivSelector.setImageResource(R.drawable.selector);
- }
- return convertView;
- }
- @Override
- public View getChildView(int groupPosition, int childPosition,
- boolean isLastChild, View convertView, ViewGroup parent) {
- convertView = inflater.inflate(R.layout.child, null);
- TextView nickTextView = (TextView) convertView
- .findViewById(R.id.tv_child);
- nickTextView.setText(getChild(groupPosition, childPosition).toString());
- return convertView;
- }
- // 子选项是否可以选择
- @Override
- public boolean isChildSelectable(int groupPosition, int childPosition) {
- return true;
- }
- }
- public class CarsListFragment extends Fragment {
- private ExpandableListView elvCompany;
- private TextView tvLoadMore;
- // 群组名称(一级条目内容)
- private String[] group = new String[] { "我的好友" };
- private String[] carsList = new String[] { "张三", "李四", "王五", "赵六",
- "天气" };
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.fragment_cars_list, null);
- tvLoadMore = (TextView) view.findViewById(R.id.tv_load_more);
- elvCompany = (ExpandableListView) view.findViewById(R.id.android_list);
- BuddyAdapter adapter = new BuddyAdapter(group, carsList, getContext());
- elvCompany.setAdapter(adapter);
- setListeners();
- return view;
- }
- private void setListeners() {
- // 分组展开
- elvCompany.setOnGroupClickListener(new OnGroupClickListener() {
- @Override
- public boolean onGroupClick(ExpandableListView parent, View v,
- int groupPosition, long id) {
- return false;
- }
- });
- // 分组关闭
- elvCompany.setOnGroupCollapseListener(new OnGroupCollapseListener() {
- @Override
- public void onGroupCollapse(int groupPosition) {
- }
- });
- // 子项点击
- elvCompany.setOnChildClickListener(new OnChildClickListener() {
- @Override
- public boolean onChildClick(ExpandableListView parent, View v,
- int groupPosition, int childPosition, long id) {
- Toast.makeText(getActivity(),
- group[groupPosition] + ":" + carsList[childPosition],
- Toast.LENGTH_SHORT).show();
- return false;
- }
- });
- tvLoadMore.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(getActivity(), "没有更多数据了", Toast.LENGTH_SHORT)
- .show();
- }
- });
- }
- }
原地址:http://www.open-open.com/lib/view/open1406014566679.html