Android源代码学习笔记:PinnedHeaderExpandableListView

 

如何使用:

接口

    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.}  

 

转载于:https://www.cnblogs.com/wakerLight/p/5231365.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值