zoukankan      html  css  js  c++  java
  • ListView上拉加载更多的写法

    listview或者recyclerview 一般我们会用到上拉加载,或者下拉加载

    /**
     * Created by Arcturis lfy on 2019/12/12.
     * <p/>
     * 上拉加载更多的listview
     * <p>Copyright 2017 新疆西北星.</p>
     */
    public class LoadMoreListView extends ListView implements AbsListView.OnScrollListener  {
    
        private Context mContext;
        private View mFootView;
        private int mTotalItemCount;
        private OnLoadMoreListener mLoadMoreListener;
        private boolean mIsLoading=false;
    
        public LoadMoreListView(Context context) {
            super(context);
            init(context);
        }
    
        public LoadMoreListView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            init(context);
        }
    
        public LoadMoreListView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init(context);
        }
    
        private void init(Context context){
            this.mContext=context;
            mFootView= LayoutInflater.from(context).inflate(R.layout.header_view_layout,null);
            setOnScrollListener(this);
        }
    
    
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            // 滑到顶部后自动加载,判断listview已经停止滚动并且最后可视的条目等于 0
            //举一反三这里也可以判断是不是到底部 ,这样 index就是为 总数-1
            int lastVisibleIndex = view.getLastVisiblePosition();
            int firstIndex = view.getFirstVisiblePosition();
            if (!mIsLoading
                    && scrollState == OnScrollListener.SCROLL_STATE_IDLE
    //                && lastVisibleIndex == mTotalItemCount-1
                    && firstIndex == 0
                    ) {
                mIsLoading=true;
    //            addFooterView(mFootView);
                addHeaderView(mFootView);
                if (mLoadMoreListener!=null) {
                    mLoadMoreListener.onloadMore();
                }
            }
    
        }
    
    
        @Override
        public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            mTotalItemCount=totalItemCount;
            if (firstVisibleItem == 0) {
                Toast.makeText(mContext, "滑到顶部",Toast.LENGTH_SHORT).show();
            }
            if (visibleItemCount + firstVisibleItem == totalItemCount) {
                Toast.makeText(mContext, "滑到底部",Toast.LENGTH_SHORT).show();
            }
    
    
        }
    
        public void setOnLoadMoreListener(OnLoadMoreListener listener){
            mLoadMoreListener=listener;
        }
    
        public interface OnLoadMoreListener{
            void onloadMore();
        }
        public void setLoadCompleted(){
            mIsLoading=false;
    //       removeFooterView(mFootView);
            removeHeaderView(mFootView);
        }
    
    }

    有一个Layout 就是Progress的在转

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="match_parent"
        android:gravity="center"
        android:padding="15dp"
        android:layout_height="match_parent">
        <ProgressBar
            style="@android:style/Widget.ProgressBar.Small"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:layout_marginLeft="10dp"
            android:text="正在加载..."
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

    那么我们怎么用呢

       mListView.setAdapter(adapter);
            mListView.setOnLoadMoreListener(new LoadMoreListView.OnLoadMoreListener() {
                @Override
                public void onloadMore() {
                    loadMore();
                }
            });
     //添加到头部的写法   mData.add(0,object);即可
    private void loadMore() {
            new Thread(){
                @Override
                public void run() {
                    super.run();
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    mData.add(0,"111");
                    mData.add(0,"222");
                    mData.add(0,"333");
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            adapter.notifyDataSetChanged();
                            mListView.setLoadCompleted();
                        }
                    });
                }
            }.start();
        }

    这样我们就能实现上拉加载更多了!

    下载加载更多未给出,大家自己改吧改吧就行了,看注释应该知道咋改了

  • 相关阅读:
    js定时相关函数:
    远程控制使用kill软件映射内网进行远程控制(9.28 第十四天)
    PHP基础(9.27 第十三天)
    使用kali中的Metasploit通过windows7的永恒之蓝漏洞攻击并控制win7系统(9.27 第十三天)
    Nmap目录扫描和漏洞扫描(9.27 第十三天)
    JS正则和点击劫持代码(第十二天 9.27)
    Banner信息收集和美杜莎使用(9.26 第十二天)
    JavaScript的运算符、条件判断、循环、类型转换(9.25 第十一天)
    使用BurpSuite和Hydra爆破相关的服务(9.25 第十一天)
    JavaScript(第十一天 9.24)
  • 原文地址:https://www.cnblogs.com/fengfenghuifei/p/12030443.html
Copyright © 2011-2022 走看看