搭建自己的直播平台,RecycleView下拉刷新,上拉加载

搭建自己的直播平台,RecycleView下拉刷新,上拉加载实现的相关代码

android 的下拉刷新,上拉加载功能,翻页时显示从第1页开始到当前页面的内容,并且当前显示的是当前页的内容;

 

1. PullRefreshRecyclerView.java : 翻页控件

 

 

1
public class PullRefreshRecyclerView extends LinearLayout implements SwipeRefreshLayout.OnRefreshListener, View.OnTouchListener {<br>    private SwipeRefreshLayout swipeRefreshLayout;<br>    private RecyclerView recyclerView;<br>    private LinearLayout footerView;<br>    private OnPullRefreshListener listener;<br>    //是否正在刷新<br>    private boolean isRefreshing = false;<br>    //是否正在加载<br>    private boolean isLoading = false;<br> <br>    //是否有更多数据<br>    private boolean hasMore = false;<br> <br>    public PullRefreshRecyclerView(Context context) {<br>        this(context, null);<br>    }<br> <br>    public PullRefreshRecyclerView(Context context, AttributeSet attrs) {<br>        super(context, attrs);<br>        initView(context);<br>        initListener();<br>        init();<br>    }<br> <br>    private void initView(Context context) {<br>        LayoutInflater.from(context).inflate(R.layout.pull_recycler_layout, this, true);<br>        swipeRefreshLayout = findViewById(R.id.swipeRefreshLayout);<br>        recyclerView = findViewById(R.id.recyclerView);<br>        footerView = findViewById(R.id.footerView);<br> <br>    }<br> <br>    private void initListener() {<br>        swipeRefreshLayout.setOnRefreshListener(this);<br>        recyclerView.addOnScrollListener(new PullableScroll());<br>        //防止滚动的时候,滑动View<br>        recyclerView.setOnTouchListener(this);<br>    }<br> <br>    private void init() {<br>        swipeRefreshLayout.setColorSchemeResources(android.R.color.holo_green_dark,<br>                android.R.color.holo_blue_dark,<br>                android.R.color.holo_orange_dark);<br>        //隐藏垂直滚动条<br>        recyclerView.setVerticalScrollBarEnabled(true);<br>        //item高度固定时,设置该选项提高性能<br>        recyclerView.setHasFixedSize(true);<br>        //设置item动画效果<br>        recyclerView.setItemAnimator(new DefaultItemAnimator());<br>    }<br> <br>    public void setHasFixedSize(boolean hasFixedSize) {<br>        recyclerView.setHasFixedSize(hasFixedSize);<br>    }<br> <br>    public void setItemAnimator(RecyclerView.ItemAnimator animator) {<br>        recyclerView.setItemAnimator(animator);<br>    }<br> <br>    public void setLayoutManager(RecyclerView.LayoutManager layout) {<br>        recyclerView.setLayoutManager(layout);<br>    }<br> <br>    public void setVerticalScrollBarEnabled(boolean verticalScrollBarEnabled) {<br>        recyclerView.setVerticalScrollBarEnabled(verticalScrollBarEnabled);<br>    }<br> <br>    public void addItemDecoration(RecyclerView.ItemDecoration decor) {<br>        recyclerView.addItemDecoration(decor);<br> <br>    }<br> <br>    public void setAdapter(RecyclerView.Adapter adapter) {<br>        recyclerView.setAdapter(adapter);<br>    }<br> <br>    /**<br>     * 设置监听下拉或上拉的事件<br>     *<br>     * @param listener<br>     */<br>    public void setOnPullRefreshListener(OnPullRefreshListener listener) {<br>        this.listener = listener;<br>    }<br> <br>    /**<br>     * 设置是否有更多数据<br>     *<br>     * @param hasMore<br>     */<br>    public void setHasMore(boolean hasMore) {<br>        this.hasMore = hasMore;<br>    }<br> <br>    /**<br>     * 滚动到顶部<br>     */<br>    public void scrollToTop() {<br>        recyclerView.scrollToPosition(0);<br>    }<br> <br>    /**<br>     * 正在刷新<br>     */<br>    @Override<br>    public void onRefresh() {<br>        isRefreshing = true;<br>        if (listener != null) {<br>            listener.onRefresh();<br>        }<br> <br>    }<br> <br>    /**<br>     * 设置是否允许下拉<br>     *<br>     * @param enable<br>     */<br>    public void setRefreshEnable(boolean enable) {<br>        swipeRefreshLayout.setEnabled(enable);<br>    }<br> <br>    /**<br>     * 滚动时判断能否能刷新<br>     *<br>     * @return<br>     */<br>    private boolean isRefreshEnable() {<br>        return !isRefreshing && !isLoading;<br>    }<br> <br>    /**<br>     * 正在加载更多<br>     */<br>    public void doLoadMore() {<br>        if (!isLoading && hasMore && !isRefreshing) {<br>            footerView.setVisibility(View.VISIBLE);<br>            isLoading = true;<br>            //禁止下拉<br>            setRefreshEnable(false);<br>            if (listener != null) {<br>                listener.onLoadMore();<br>            }<br>        }<br>    }<br> <br>    /**<br>     * 刷新或加载完成<br>     */<br>    public void refreshOrLoadComplete() {<br>        isRefreshing = false;<br>        swipeRefreshLayout.setRefreshing(false);<br>        isLoading = false;<br>        footerView.setVisibility(View.GONE);<br>        //允许下拉<br>        this.setEnabled(true);<br>    }<br> <br>    @Override<br>    public boolean onTouch(View v, MotionEvent event) {<br>        return isRefreshing || isLoading;<br>    }<br> <br>    public interface OnPullRefreshListener {<br>        /**<br>         * 刷新操作<br>         */<br>        void onRefresh();<br> <br>        /**<br>         * 加载操作<br>         */<br>        void onLoadMore();<br>    }<br> <br>    /**<br>     * 监听RecycleView滑动底部或顶部<br>     */<br>    class PullableScroll extends RecyclerView.OnScrollListener {<br>        @Override<br>        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {<br>            super.onScrolled(recyclerView, dx, dy);<br>            int lastVisibleItem = 0;<br>            int firstVisibleItem = 0;<br>            RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();<br>            int totalItemCount = layoutManager.getItemCount();<br>            if (layoutManager instanceof LinearLayoutManager) {<br>                LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager;<br>                lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();<br>                firstVisibleItem = linearLayoutManager.findFirstCompletelyVisibleItemPosition();<br>            } else if (layoutManager instanceof StaggeredGridLayoutManager) {<br>                StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager;<br>                // since may lead to the final item has more than one StaggeredGridLayoutManager the particularity of the so here that is an array<br>                // this array into an array of position and then take the maximum value that is the last show the position value<br>                int[] lastPositions = new int[((StaggeredGridLayoutManager) layoutManager).getSpanCount()];<br>                staggeredGridLayoutManager.findLastVisibleItemPositions(lastPositions);<br>                lastVisibleItem = findMax(lastPositions);<br>                firstVisibleItem = staggeredGridLayoutManager.findFirstVisibleItemPositions(lastPositions)[0];<br>            }<br> <br>            pullRefreshEnable(firstVisibleItem, totalItemCount);<br>            if (isSlideToBottom(recyclerView)) {<br>                loadMore(dx, dy, lastVisibleItem, totalItemCount);<br>            }<br> <br>        }<br> <br>        private int findMax(int[] lastPositions) {<br>            int max = lastPositions[0];<br>            for (int value : lastPositions) {<br>                if (value > max) {<br>                    max = value;<br>                }<br>            }<br>            return max;<br>        }<br>    }<br> <br>    /**<br>     * 判断是否滑动到底部<br>     *<br>     * @param recyclerView<br>     * @return<br>     */<br>    public boolean isSlideToBottom(RecyclerView recyclerView) {<br>        if (recyclerView == null) {<br>            return false;<br>        }<br>        if (recyclerView.computeVerticalScrollExtent() + recyclerView.computeVerticalScrollOffset()<br>                >= recyclerView.computeVerticalScrollRange()) {<br>            return true;<br>        }<br>        return false;<br>    }<br> <br>    private void loadMore(int dx, int dy, int lastVisibleItem, int totalItemCount) {<br>        //滚动到底部时且有更多数据能够上拉加载<br>        if (lastVisibleItem >= totalItemCount - 1 && (dx > 0 || dy > 0)) {<br>            doLoadMore();<br>        }<br>    }<br> <br>    private void pullRefreshEnable(int firstVisibleItem, int totalItemCount) {<br>        //滚动到顶部时能够下拉刷新<br>        if (firstVisibleItem == 0 || totalItemCount == 0) {<br>            if (isRefreshEnable()) {<br>                //允许下拉<br>                setRefreshEnable(true);<br>            }<br>        } else {<br>            //禁止下拉<br>            setRefreshEnable(false);<br>        }<br>    }<br> <br>}

2. PunishListActivity.java: 调用

 

 

1
@Route(path = Page.ACTIVITY_PUNISH_LIST)<br>public class PunishListActivity extends BaseActivity implements View.OnClickListener, PullRefreshRecyclerView.OnPullRefreshListener {<br>    private static final String TAG = "PunishListActivity";<br>    private List<PunishBean> punishBeans = new ArrayList<>();<br>    private Context mContext;<br>    private EditText et_punish_searchName;<br>    private ImageView iv_search;<br>    private PullRefreshRecyclerView prr_punish;<br>    private String officeName = "";<br>    private int pageNo = 1;<br>    private boolean isLastPage = false;<br>    private PunishAdapter punishAdapter;<br> <br>    @Override<br>    public void onBeforeSetContentView() {<br>        StatusBarUtil.translucent(this, ContextCompat.getColor(this, R.color.color_0a5fb6));<br>    }<br> <br>    @Override<br>    public int getLayoutResID() {<br>        return R.layout.activity_punish_list;<br>    }<br> <br>    @Override<br>    protected CharSequence setActionBarTitle() {<br>        return "行政处罚";<br>    }<br>    @Nullable<br>    @Override<br>    public AppBarConfig getAppBarConfig() {<br>        return mAppBarCompat;<br>    }<br> <br>    @Override<br>    public int setActionBarRightVisibility() {<br>        return View.VISIBLE;<br>    }<br> <br>    @Override<br>    public CharSequence setActionBarRightText() {<br>        return "添加";<br>    }<br> <br>    public void onResume(){<br>        super.onResume();<br>        getPunishList("");<br>    }<br> <br>    @Override<br>    public void initContentView(@Nullable Bundle savedInstanceState) {<br>        mContext = PunishListActivity.this;<br>        et_punish_searchName = findViewById(R.id.et_punish_searchName);<br>        iv_search = findViewById(R.id.iv_search);<br>        iv_search.setOnClickListener(this);<br>        prr_punish = findViewById(R.id.prr_punish);<br>        prr_punish.setOnPullRefreshListener(this);<br>        prr_punish.setHasMore(true);<br>    }<br> <br>    @Override<br>    public void initData(@Nullable Bundle savedInstanceState) {<br>        punishAdapter = new PunishAdapter(mContext,punishBeans);<br>        LinearLayoutManager manager = new LinearLayoutManager(mContext);<br>        manager.setOrientation(RecyclerView.VERTICAL);<br>        prr_punish.setLayoutManager(manager);<br>        prr_punish.setAdapter(punishAdapter);<br>//        getPunishList();<br>    }<br> <br>    private void getPunishList(String officeName){<br>        HashMap<String, Object> baseParam = WebFrontUtil.getBaseParam();<br>        baseParam.put("pageNo", pageNo);<br>        baseParam.put("pageSize", 10);<br> <br>        baseParam.put("officeName", officeName);<br>        OkHttpUtil.post(TAG, WebApi.PUNISH_LIST_URL, baseParam, new StringCallback() {<br>            @Override<br>            public void onError(Call call, Exception e, int id) {<br>                hideWaitDialog();<br>                Log.d(TAG,""+e);<br>            }<br> <br>            @Override<br>            public void onResponse(String response, int id) {<br>                Log.d(TAG,"response==="+response);<br>                try {<br>                    JSONObject object = new JSONObject(response);<br>                    hideWaitDialog();<br>                    if ((int)object.get("code") == 200) {<br>                        JSONObject object1 = object.getJSONObject("data");<br>                        PunishBeanList punishBeanList = new Gson().fromJson(object1.toString(),PunishBeanList.class);<br>                        Log.d(TAG,"response==="+punishBeanList.getList().size());<br>                        if (pageNo == 1) {<br>                            punishBeans.clear();<br>                        }<br>                        if (punishBeanList.getList() != null && punishBeanList.getList().size() != 0) {<br>                            List<PunishBean> addPunishs = new ArrayList<>();<br>                            addPunishs = punishBeanList.getList();<br>                            if (punishBeans.size() > 0) {<br>                                punishBeans.addAll(addPunishs);<br>                                punishAdapter.addMoreData(addPunishs);<br>                            } else {<br>                                punishBeans = addPunishs;<br>                                punishAdapter.setData(addPunishs);<br>                            }<br> <br>                            if (punishBeanList.isLastPage()) {<br>                                isLastPage = true;<br>                                Log.e(TAG,"isLastPage = true ");<br>                            }else {<br>                                isLastPage = false;<br>                                Log.e(TAG,"isLastPage = false ");<br>                            }<br>                        }<br>                    } else {<br>                        Toast.makeText(mContext,object.get("message").toString(),Toast.LENGTH_SHORT).show();<br>                    }<br>                } catch (JSONException e) {<br>                    e.printStackTrace();<br>                }<br>            }<br>        });<br>    }<br> <br>    @Override<br>    protected void actionBarRightOnClick() {<br>        ARouter.getInstance().build(Page.ACTIVITY_PUNISH_ADD).navigation();<br>    }<br> <br>    @Override<br>    public void onClick(View view) {<br>        switch (view.getId()) {<br>            case R.id.iv_search:<br>                showWaitDialog();<br>                officeName = et_punish_searchName.getText().toString();<br>                pageNo = 1;<br>                isLastPage = false;<br>                getPunishList(officeName);<br>                break;<br>        }<br>    }<br> <br>    @Override<br>    public void onRefresh() {<br>        prr_punish.refreshOrLoadComplete();<br>        pageNo = 1;<br>        getPunishList(officeName);<br>        prr_punish.setRefreshEnable(true);<br>    }<br> <br>    @Override<br>    public void onLoadMore() {<br>        Log.d(TAG,"onLoadMore===================");<br>        prr_punish.refreshOrLoadComplete();<br>        if (isLastPage) {<br>            prr_punish.setRefreshEnable(false);<br>        } else {<br>            pageNo += 1;<br>            getPunishList(officeName);<br>        }<br>    }<br>}

 

以上就是搭建自己的直播平台,RecycleView下拉刷新,上拉加载实现的相关代码, 更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(134)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示