VLayout + 加载更多 用法

引入

 implementation ('com.alibaba.android:vlayout:1.0.7@aar') {
        transitive = true
    }

 

数据源

package com.zcf.myvlayout;

import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

import com.github.nukc.LoadMoreWrapper.LoadMoreAdapter;
import com.rulerbug.bugutils.Domain.BugOkHttpDataList;
import com.rulerbug.bugutils.Utils.BugLogUtils;
import com.rulerbug.bugutils.Utils.BugOkHttpUtils;
import com.rulerbug.bugutils.Utils.BugThreadUtils;

import java.io.IOException;
import java.util.ArrayList;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class MainViewModel extends ViewModel {

    private final ArrayList<Integer> integers;

    public ArrayList<Integer> getData(int size) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(i);
        }
        return list;
    }

    public MutableLiveData<ArrayList<Integer>> liveData = new MutableLiveData<>();

    public MainViewModel() {
        integers = new ArrayList<>();

        liveData.setValue(integers);
    }

    public void loadData(LoadMoreAdapter.Enabled enabled) {
        BugOkHttpUtils.postHttp(Whole.URL, BugOkHttpUtils.getFormBody(new BugOkHttpDataList()

        ), new Callback() {

            @Override
            public void onFailure(Call call, IOException e) {
                enabled.setLoadMoreEnabled(false);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                BugLogUtils.e("onResponse");
                integers.add(1);
                integers.add(1);
                integers.add(1);
                integers.add(1);
                integers.add(1);
                integers.add(1);
                integers.add(1);
                integers.add(1);
                integers.add(1);
                integers.add(1);
                integers.add(1);
                integers.add(1);
                integers.add(1);
                integers.add(1);
                liveData.postValue(integers);
                enabled.setLoadMoreEnabled(false);
            }
        });
    }
}

这是adapter

package com.zcf.myvlayout.Adapter;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.RecyclerView;

import com.alibaba.android.vlayout.DelegateAdapter;
import com.alibaba.android.vlayout.LayoutHelper;
import com.alibaba.android.vlayout.layout.GridLayoutHelper;
import com.alibaba.android.vlayout.layout.StickyLayoutHelper;
import com.zcf.myvlayout.R;
import com.zcf.myvlayout.databinding.ItemLineBinding;
import com.zcf.myvlayout.databinding.ItemTextBinding;

import java.util.ArrayList;

public class MyStickAdapter extends DelegateAdapter.Adapter {

    private StickyLayoutHelper helper;
    private ArrayList<Integer> al;

    public MyStickAdapter(StickyLayoutHelper helper, ArrayList<Integer> al) {
        this.helper = helper;
        this.al = al;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ItemLineBinding itemTextBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item_line, parent, false);
        return new MyFirstViewHolder(itemTextBinding.getRoot());
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ItemLineBinding item = DataBindingUtil.bind(holder.itemView);
        item.setData(al.get(position) + "");
        item.executePendingBindings();
    }
    @Override
    public int getItemViewType(int position) {
        return 4;
    }

    @Override
    public int getItemCount() {
        return al.size();
    }

    @Override
    public LayoutHelper onCreateLayoutHelper() {
        return helper;
    }

    public class MyFirstViewHolder extends RecyclerView.ViewHolder {

        public MyFirstViewHolder(@NonNull View itemView) {
            super(itemView);
        }
    }
}

写很多这样的adapter,重点


    @Override
    public int getItemViewType(int position) {
        return 0;
    }

 这个type一定要有,每个adapter都要不一样

package com.zcf.myvlayout.Adapter;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.MutableLiveData;
import androidx.recyclerview.widget.RecyclerView;

import com.alibaba.android.vlayout.DelegateAdapter;
import com.alibaba.android.vlayout.LayoutHelper;
import com.alibaba.android.vlayout.layout.StaggeredGridLayoutHelper;
import com.alibaba.android.vlayout.layout.StickyLayoutHelper;
import com.rulerbug.bugutils.Utils.BugLogUtils;
import com.zcf.myvlayout.R;
import com.zcf.myvlayout.databinding.ItemTextBinding;

import java.util.ArrayList;

public class MyStaggeredGridAdapter extends DelegateAdapter.Adapter {

    private StaggeredGridLayoutHelper helper;
    private ArrayList<Integer> al;


    public MyStaggeredGridAdapter(StaggeredGridLayoutHelper helper, ArrayList<Integer> al) {
        this.helper = helper;
        this.al = al;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ItemTextBinding itemTextBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item_text, parent, false);
        return new MyFirstViewHolder(itemTextBinding.getRoot());
    }

    @Override
    public int getItemViewType(int position) {
        return 0;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ItemTextBinding itemTextBinding = DataBindingUtil.bind(holder.itemView);
        itemTextBinding.setData(al.get(position) + "");
        itemTextBinding.executePendingBindings();
    }

    @Override
    public int getItemCount() {

        if (al== null) {
            return 0;
        }
        return al.size();
    }

    @Override
    public LayoutHelper onCreateLayoutHelper() {
        return helper;
    }

    public class MyFirstViewHolder extends RecyclerView.ViewHolder {

        public MyFirstViewHolder(@NonNull View itemView) {
            super(itemView);
        }
    }
}

然后

        val vLayoutManager = VirtualLayoutManager(this)
        binding.rv.layoutManager = vLayoutManager;
        val pool = RecyclerView.RecycledViewPool()
        binding.rv.setRecycledViewPool(pool)
        pool.setMaxRecycledViews(0, 20)
        val adapter = DelegateAdapter(vLayoutManager, true)
        binding.rv.adapter = adapter

给recylervierew绑定一个根适配器,一个布局,一个pool

然后把写的小适配器,加入根适配器

        val myBinnerAdapter =
            MyBinnerAdapter(LinearLayoutHelper(), vm.getData(1))
        val gridLayoutHelper = GridLayoutHelper(4)
        gridLayoutHelper.setMargin(0, 100, 0, 100)
        val myGrideAdapter =
            MyGrideAdapter(gridLayoutHelper, vm.getData(8))
        val stickyLayoutHelper = StickyLayoutHelper()
        val myStickAdapter =
            MyStickAdapter(stickyLayoutHelper, vm.getData(1))
        val staggeredGridLayoutHelper = StaggeredGridLayoutHelper(3, 10)
        staggeredGridLayoutHelper.setMargin(10, 10, 10, 10)

        val myStaggeredGridAdapter =
            MyStaggeredGridAdapter(staggeredGridLayoutHelper, vm.getData(1024))
        adapter.addAdapter(myBinnerAdapter)
        adapter.addAdapter(myGrideAdapter)
        adapter.addAdapter(myStickAdapter)
        adapter.addAdapter(myStaggeredGridAdapter)

 加上这个,可以加载更多数据

     vm.liveData.observe(this, object : Observer<ArrayList<Int>> {
            override fun onChanged(t: ArrayList<Int>?) {


                staggeredGridAdapter.notifyDataSetChanged()
            }
        })
        LoadMoreWrapper.with(adapter)
            .setShowNoMoreEnabled(true)
            .setNoMoreView(R.layout.item_nomore)
            .setFooterView(R.layout.item_hasmore)
            .setListener(object : LoadMoreAdapter.OnLoadMoreListener {
                override fun onLoadMore(enabled: LoadMoreAdapter.Enabled?) {
                    vm.loadData(enabled)
                }
            })
            .into(binding.rv);

结果

标题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值