Runt
2022-03-01 cc5e1cbab3de2c497ffb12d4fc49dd331ba20a5c
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
package com.auto.lyric.base.activities;
 
import android.os.Bundle;
 
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewbinding.ViewBinding;
 
import com.auto.lyric.base.adapter.BaseAdapter;
import com.auto.lyric.base.model.BaseLoadPageViewModel;
import com.auto.lyric.data.BasePageResult;
import com.auto.lyric.databinding.RefreshRecyclerBinding;
import com.scwang.smart.refresh.footer.ClassicsFooter;
import com.scwang.smart.refresh.header.ClassicsHeader;
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener;
 
import java.lang.reflect.ParameterizedType;
import java.util.HashMap;
 
/**
 * Created by Administrator on 2021/11/4 0004.
 */
public abstract class BaseLoadPageActivity<B extends ViewBinding,VM extends BaseLoadPageViewModel,A extends BaseAdapter,D extends BasePageResult>
        extends BaseTitleBarActivity<B,VM>  implements OnRefreshLoadMoreListener {
 
    protected SmartRefreshLayout smartRefresh;
    protected RecyclerView recycler;
    final String TAG = "RecyclerFragment";
    protected A adapter;//适配器
    protected String url;//请求地址
    protected HashMap param;//参数
    protected int page=1;
    protected final int SIZE = 10;
    protected boolean isRefresh = false;//是否正在刷新
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            Class<A> entityClass = (Class<A>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[2];
            this.adapter = entityClass.newInstance();//实例化泛型
            String smartStr = "smartRefresh";
            smartRefresh = (SmartRefreshLayout) binding.getClass().getField(smartStr).get(binding);
            recycler =  (RecyclerView) binding.getClass().getDeclaredField("recycler").get(binding);
        } catch (NoSuchFieldException e) {
            try {
                RefreshRecyclerBinding includeRefreshRecycler = (RefreshRecyclerBinding) binding.getClass().getDeclaredField ("includeRefreshRecycler").get(binding);
                smartRefresh = includeRefreshRecycler.smartRefresh;
                recycler =  includeRefreshRecycler.recycler;
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
        smartRefresh.setRefreshHeader(new ClassicsHeader(mContext));
        smartRefresh.setRefreshFooter(new ClassicsFooter(mContext));
        smartRefresh.setOnRefreshLoadMoreListener(this);
        recycler.setLayoutManager(new LinearLayoutManager(mContext));
        recycler.setAdapter(adapter);
    }
 
    private void finishFreshLoadmore(D result){
        if(result.code == 200){
 
            smartRefresh.setEnableRefresh(true);
            smartRefresh.finishRefresh();
            if(page == 1){
                adapter.getData().clear();
                adapter.setData(result.rows);
            }else{
                adapter.getData().addAll(result.rows);
                adapter.notifyDataSetChanged();
            }
            if(result.total <= adapter.getData().size()// 总数是否已经加载完
                    || result.rows.size() < SIZE // 最后一页数据的数量一般不满size
            ){//判断是否没有数据了
                smartRefresh.finishLoadMoreWithNoMoreData();
            }else {
                smartRefresh.finishLoadMore();
            }
        }else{
            smartRefresh.setEnableRefresh(true);
            smartRefresh.finishRefresh();
            smartRefresh.finishLoadMore();
        }
    }
 
    public A getAdapter() {
        return adapter;
    }
}