RecyclerView 下拉刷新 上拉加载

//引用
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-6'
//布局
<com.scwang.smartrefresh.layout.SmartRefreshLayout
    android:id="@+id/srl_fresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.scwang.smartrefresh.layout.header.ClassicsHeader
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/item02"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:overScrollMode="never"
        android:fadingEdge="none"
        android:divider="@null"
        android:background="@color/text_gray01"
        android:listSelector="@color/text_white01"/>

    <com.scwang.smartrefresh.layout.footer.ClassicsFooter
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>

 

    private EditText item01;
    private RecyclerView item02; 

    private int page = 1;//页数
    private int limit = 10;//条数
    private int limit01;//记录 总条数- 总以请求的条数
    String Search = "";

    GetDYListAdapter getDYListAdapter;
    GetDYListBean getDYListBean;
    List<GetDYListBean.DataBean> mDatas = new ArrayList<>();
    SmartRefreshLayout srfresh;

    private Handler mHandler = new Handler();
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_print_record);
        initView();

        initData();

        LinearLayoutManager layoutManager= new LinearLayoutManager(PrintRecordAcitivty.this);
        item02.setLayoutManager(layoutManager);
        getDYListAdapter = new GetDYListAdapter(PrintRecordAcitivty.this, mDatas);
        item02.setAdapter(getDYListAdapter);

    }

    private void initView() {
        item01 = findViewById(R.id.item01);
        srfresh = findViewById(R.id.srl_fresh);
        item02 = findViewById(R.id.item02); 
    }

    private void initData() {
        getList("");
        item01.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
                if (i== EditorInfo.IME_ACTION_SEND ||(keyEvent!=null && keyEvent.getKeyCode()== KeyEvent.KEYCODE_ENTER)) {
                    return true;
                }
                Search = item01.getText().toString().trim();
                mDatas.clear();

                getList(Search);

                return false;
            }
        });
    }
    
    public void getList(String search){
        Map map = new HashMap();
        map.put("type","0");
        map.put("page",page);
        map.put("limit",limit);
        map.put("condition",search);//模糊搜索条件 (name,address,type,trade,link,phone)
        Gson gson = new Gson();
        final String json = gson.toJson(map);
        OkHttpUtils
                .postString()
                .url(UrlConfig.getDYList)
                .addHeader("uid", BasicData.uid +"")
                .addHeader("apiToken",BasicData.token)
                .addHeader("apiFlag", "2")
                .mediaType(MediaType.parse("application/json; charset=utf-8"))
                .content(json)
                .build()
                .execute(new StringCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        e.printStackTrace();
                        Log.e("webresponse:", "err");
                        ToastUtil.showToast(PrintRecordAcitivty.this,"获取根据条件查询服务码,请检查网络");

                    }
                    @Override
                    public void onResponse(String response, int id) {
                        Log.e("PatrolPlan-Http:", response + "z");

                        try {
                            JSONObject object = new JSONObject(response);
                            String status = object.getString("status");
                            int count = object.getInt("count");//总数
                            if (status.equals("1")) {
                                getDYListBean = MyUtils.getGson().fromJson(response, GetDYListBean.class);
//                                int count = getList.getData().size();
                                if (page == 1) {
                                    mDatas.clear();
                                }
                                if (getDYListBean != null && getDYListBean.getData() != null && getDYListBean.getData().size() > 0) {
                                    mDatas.addAll(getDYListBean.getData());

                                    Log.e("mDatas.size()",mDatas.size()+"");
                                }

                                getDYListAdapter.notifyDataSetChanged();
                                limit01 = mDatas.size();
                                aboutAapter(Search,count,mDatas.size());

                            }else if (status.equals("0")){
                                ToastUtil.showToast(PrintRecordAcitivty.this,object.getString("msg"));
                            }
                        }catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });
    }


    public void aboutAapter(final String search, final int count, final int size) {
        srfresh.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(final RefreshLayout refreshlayout) {
                //延时展示,延时2秒
                mHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {

                        refreshlayout.finishRefresh();
                    }
                },100);

            }
        });
        //加载
        srfresh.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(final RefreshLayout refreshlayout) {
                mHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (size > count){
                            refreshlayout.finishLoadMoreWithNoMoreData();
                        }else {

                            if (page * limit >= count){
                                refreshlayout.finishLoadMoreWithNoMoreData();
                            }else {
                                page = page +1;
                                getList(search);
                                refreshlayout.finishLoadMore();
                            }
                        }
                    }
                },500);

            }
        });
        srfresh.setEnableRefresh(false);
        srfresh.setEnableLoadMore(true);
        srfresh.autoRefresh();
    }

//  Gson  工具类

public class MyUtils {
     private static Gson gson;
     public static Gson getGson() {
        if(gson==null){
            GsonBuilder gb = new GsonBuilder();
            gb.registerTypeAdapter(Date.class, new DateSerializer()).setDateFormat(DateFormat.LONG)
                    .registerTypeAdapter(Date.class, new DateDeserializer()).setDateFormat(DateFormat.LONG)
                    .registerTypeAdapter(Double.class, new DoubleDefault0Adapter())
                    .registerTypeAdapter(double.class, new DoubleDefault0Adapter())
                    .registerTypeAdapter(Integer.class, new IntegerDefault0Adapter())
                    .registerTypeAdapter(int.class, new IntegerDefault0Adapter())
                    .setDateFormat("yyyy-MM-dd");

            gson = gb.create();
            return gson;
        }else {
            return gson;
        }
    }


    static class DateSerializer implements JsonSerializer<Date> {
        public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
            return new JsonPrimitive(src.getTime());
        }
    }

    static class DateDeserializer implements JsonDeserializer<Date> {

        public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
            return new Date(json.getAsJsonPrimitive().getAsLong());
        }
    }
}

 

public class IntegerDefault0Adapter implements JsonSerializer<Integer>, JsonDeserializer<Integer> {
@Override
public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException
    {
    try {
        if (json.getAsString().equals("") || json.getAsString().equals("null")) {//定义为int类型,如果后台返回""或者null,则返回0
            return 0;
        }
    } catch (Exception ignore) {

    }
    try {
        return json.getAsInt();
    } catch (NumberFormatException e) {
        throw new JsonSyntaxException(e);
    }
}

@Override
public JsonElement serialize(Integer src, Type typeOfSrc, JsonSerializationContext context) {
    return new JsonPrimitive(src);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值