lmw
2024-05-27 c00669a852702e1aa1326872bb916f9a079b57e2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package cn.sinata.xldutils.adapter;
 
import android.view.View;
import android.view.ViewGroup;
 
import cn.sinata.xldutils.adapter.util.ViewHolder;
 
import java.util.List;
 
/**
 *
 * Created by LiaoXiang on 2015/11/4.
 */
public abstract class HFRecyclerAdapter<T> extends BaseRecyclerAdapter<T> {
    private static final int TYPE_HEADER = -3;//头部
    private static final int TYPE_NORMAL = 0;//普通
    private static final int TYPE_FOOTER = -1;//尾部
    private ViewHolder headerViewHolder;
    private ViewHolder footerViewHolder;
 
    public HFRecyclerAdapter(List<T> mData, int layoutId) {
        super(mData,layoutId);
    }
 
    @Override
    public int getItemViewType(int position) {
        if (isHeader(position)){
            return TYPE_HEADER;
        }
        if (isFooter(position)){
            return TYPE_FOOTER;
        }
        return TYPE_NORMAL;
    }
 
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == TYPE_HEADER){
            return headerViewHolder;
        }else if (viewType == TYPE_FOOTER){
            return footerViewHolder;
        }
        return super.onCreateViewHolder(parent, viewType);
    }
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
//        System.err.println("h-->"+hasHeader()+"--f--->"+isFooter(position));
        if (!isHeader(position) && !isFooter(position)){
            super.onBindViewHolder(holder,position-(hasHeader()?1:0));
        }
    }
 
    @Override
    public int getItemCount() {
        int count = super.getItemCount();
        if (hasHeader()){
            count += 1;
        }
        if (hasFooter()){
            count += 1;
        }
        return  count;
    }
    public int getDataItemCount() {
        return super.getItemCount();
    }
    /**
     * 设置headerView
     * @param view    headerView
     */
    public void setHeaderView(View view){
        if (headerViewHolder == null || view != headerViewHolder.itemView){
            headerViewHolder = new ViewHolder(view);
            notifyDataSetChanged();
        }
    }
 
    /**
     * 设置footerView
     * @param view footerView
     */
    public void setFooterView(View view){
 
        if (footerViewHolder == null || view != footerViewHolder.itemView){
            footerViewHolder = new ViewHolder(view);
            notifyDataSetChanged();
        }
    }
 
    /**
     * 是否有headerView
     * @return 是否有headerView
     */
    private boolean hasHeader(){
        return  headerViewHolder != null;
    }
 
    /**
     * 是否有footerView
     * @return 是否有footerView
     */
    private boolean hasFooter(){
        return  footerViewHolder != null;
    }
 
    /**
     * 是否是头view
     * @param position 当前位置
     * @return 是否头view
     */
    private boolean isHeader(int position){
        return  hasHeader() && position == 0;
    }
 
    /**
     * 当前位置是否是footerView
     * @param position 当前位置
     * @return 是否footerView
     */
    private boolean isFooter(int position){
        return hasFooter() && position == getDataItemCount() + (hasHeader() ? 1 : 0);
    }
}