如何使用:
接口 public interface OnHeaderUpdateListener { /** * 返回一个view对象即可 * 注意:view必须要有LayoutParams */ public View getPinnedHeader(); public void updatePinnedHeader(View headerView, int firstVisibleGroupPos); } public interface OnGiveUpTouchEventListener { public boolean giveUpTouchEvent(MotionEvent event); } 如何使用 让你的activity实现OnHeaderUpdateListener, OnGiveUpTouchEventListener两个接口, 分别为PinnedHeaderExpandableListView中如何绘制和更新固定的头部以及StickyLayout中content何时放弃事件处理。 @Override public View getPinnedHeader() { View headerView = (ViewGroup) getLayoutInflater().inflate(R.layout.group, null); headerView.setLayoutParams(new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); return headerView; } @Override public void updatePinnedHeader(View headerView, int firstVisibleGroupPos) { Group firstVisibleGroup = (Group) adapter.getGroup(firstVisibleGroupPos); TextView textView = (TextView) headerView.findViewById(R.id.group); textView.setText(firstVisibleGroup.getTitle()); } @Override public boolean giveUpTouchEvent(MotionEvent event) { if (expandableListView.getFirstVisiblePosition() == 0) { View view = expandableListView.getChildAt(0); if (view != null && view.getTop() >= 0) { return true; } } return false; }
适配器代码:
01.@Override 02.public int getSectionHeaderState(int groupPosition, int childPosition) { 03. final int childCount = getChildrenCount(groupPosition); 04. if (childPosition == childCount - 1) { 05. return PINNED_HEADER_PUSHED_UP; 06. } 07. else if (childPosition == -1 && !mListView.isGroupExpanded(groupPosition)) { 08. return PINNED_HEADER_GONE; 09. } 10. else { 11. return PINNED_HEADER_VISIBLE; 12. } 13.} 14. 15. 16.@Override 17.public void configureSectionHeader(View header, int groupPosition, int childPosition, int alpha) { 18. TextView headerView = (TextView) header.findViewById(R.id.header_type); 19. ImageView headerIcon = (ImageView) header.findViewById(R.id.junk_icon_header); 20. GroupBean bean = (GroupBean) getGroup(groupPosition); 21. headerView.setText(bean.name); 22. headerIcon.setImageResource(bean.icon); 23. final ImageView checkView = (ImageView) header.findViewById(R.id.checkbox); 24. ImageView expandView = (ImageView) header.findViewById(R.id.expand_icon); 25. expandView.setSelected(bean.isExpand); 26. int size = mChilds.get(groupPosition).size(); 27. if (size == 0) { 28. expandView.setVisibility(View.INVISIBLE); 29. checkView.setVisibility(View.INVISIBLE); 30. } else { 31. checkView.setVisibility(View.VISIBLE); 32. expandView.setVisibility(View.VISIBLE); 33. SparseArray<AppBean> set = mSelectSet.get(groupPosition); 34. if (mIsScanFinished) { 35. checkView.setSelected(set.size() == size); 36. } else { 37. checkView.setSelected(mDefaultCheckState); 38. } 39. } 40.} 41. 42. 43.private HashMap<Integer, Integer> groupStatusMap = new HashMap<Integer, Integer>(); 44. 45. 46.@Override 47.public void setGroupClickStatus(int groupPosition, int status) { 48. groupStatusMap.put(groupPosition, status); 49.} 50. 51. 52.@Override 53.public int getGroupClickStatus(int groupPosition) { 54. if (groupStatusMap.containsKey(groupPosition)) { 55. return groupStatusMap.get(groupPosition); 56. } 57. else { 58. return 0; 59. } 60.}