• ListView上拉加载,下拉刷新功能


    直接上代码了,先上activity代码,下载就不用说了,直接在日志那地方写就行,主要是上拉,需要用到listview自己的监听事件,依靠滑动的对应值来加载数据,然后并传入数据适配器中,来对尾布局内的值进行修改。

    public class MainActivity3 extends AppCompatActivity {
    
        private static final String TAG = MainActivity3.class.getSimpleName();
        SwipeRefreshLayout sf1;
        ListView listView1;
        MainAdapter mainAdapter;
        List<MainBean> list;
        boolean isLastRow=false;
        int page=1;
        int pagesize=20;
    
        @RequiresApi(api = Build.VERSION_CODES.M)
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main3);
    
            SwipeRefreshLayout sf1 = findViewById(R.id.sr1);
            listView1 = findViewById(R.id.list1);
    
            list = new ArrayList<>();
    
            mainAdapter = new MainAdapter(this,list);
            listView1.setAdapter(mainAdapter);
            getList();
    
            sf1.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    Log.i(TAG, "onRefresh: 加载");
                    sf1.setRefreshing(false);
                }
            });
    
            listView1.setOnScrollListener(new AbsListView.OnScrollListener() {
                @Override
                public void onScrollStateChanged(AbsListView absListView, int i) {
                    //第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1) 正在滚动
                    //第2次:scrollState = SCROLL_STATE_FLING(2) 手指做了抛的动作(手指离开屏幕前,用力滑了一下)
                    //第3次:scrollState = SCROLL_STATE_IDLE(0) 停止滚动
                    if(isLastRow&&i==SCROLL_STATE_IDLE) {
                        mainAdapter.changeMoreStatus(MainAdapter.LOADING_MORE);
                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                getList();
                                isLastRow = false;
                                mainAdapter.changeMoreStatus(MainAdapter.PULLUP_LOAD_MORE);
                            }
                        }, 2500);
                    }
                }
    
                @Override
                public void onScroll(AbsListView absListView, int i, int i1, int i2) {
                    //滚动时一直回调,直到停止滚动时才停止回调。单击时回调一次。
                    //i:当前能看见的第一个列表项ID(从0开始)
                    //i1:当前能看见的列表项个数(小半个也算)
                    //i2:列表项共数
                    if(i+i1==i2&&i2>0){
                        isLastRow=true;
                    }
                }
            });
    
        }
    
        private void getList() {
            if(page<3) {
                int startInt = 1 + (page - 1) * pagesize;
                for (int i = startInt; i < startInt + pagesize; i++) {
                    list.add(new MainBean(String.valueOf(i), "regnum:" + i));
                }
                page++;
                mainAdapter.set_list(list);
                mainAdapter.notifyDataSetChanged();
    
            }
        }
    }

    数据适配器代码

    public class MainAdapter extends BaseAdapter {
    
        private static final  int TYPE_ITEM=0;
        private static final  int TYPE_FOOTER=1;
        //上拉加载更多
        public static final int  PULLUP_LOAD_MORE=0;
        //正在加载中
        public static final int  LOADING_MORE=1;
    
        private int load_more_status=0;
    
        private String footerText ;
    
        public String getFooterText() {
            return footerText;
        }
    
        public void setFooterText(String footerText) {
            this.footerText = footerText;
        }
    
        private static final String TAG = MainAdapter.class.getSimpleName();
    
        private LayoutInflater _mInflaster;
    
        public List<MainBean> get_list() {
            return _list;
        }
    
        public void set_list(List<MainBean> _list) {
            this._list = _list;
        }
    
        private List<MainBean> _list;
    
        public MainAdapter(Context context, List<MainBean> list) {
            _mInflaster = LayoutInflater.from(context);
            _list = list;
        }
    
        public void changeMoreStatus(int status){
            load_more_status=status;
            notifyDataSetChanged();
        }
    
        @Override
        public int getCount() {
            return _list.size();
        }
    
        @Override
        public Object getItem(int i) {
            return _list.get(i);
        }
    
        @Override
        public int getItemViewType(int position) {
            if(position+1== _list.size()+1){
                return TYPE_FOOTER;
            }else {
                return TYPE_ITEM;
            }
        }
    
        @Override
        public long getItemId(int i) {
            return i;
        }
    
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            if(i+1== _list.size()){
    
                ViewHodler_Footer viewHodler_footer = null;
                if(viewHodler_footer==null) {
                    viewHodler_footer = new ViewHodler_Footer();
                    view = _mInflaster.inflate(R.layout.foot_list,null);
                    viewHodler_footer.foot_text = view.findViewById(R.id.foot_text);
                    view.setTag(viewHodler_footer);
                }
                else
                {
                    viewHodler_footer = (ViewHodler_Footer) view.getTag();
                }
                switch (load_more_status)
                {
                    case PULLUP_LOAD_MORE:
                        viewHodler_footer.foot_text.setText("上拉加载更多...");
                        break;
                    case LOADING_MORE:
                        viewHodler_footer.foot_text.setText("正在加载更多数据...");
                        break;
                }
                return view;
            }else {
                ViewHolder holder=null;
                if(holder==null)
                {
                    holder = new ViewHolder();
                    view =  _mInflaster.inflate(R.layout.list_item,null);
                    holder.t1 = view.findViewById(R.id.list_item_id);
                    holder.t2 = view.findViewById(R.id.list_item_regnum);
                    view.setTag(holder);
                }
                else
                {
                    holder = (ViewHolder) view.getTag();
    
                }
                holder.t1.setText(_list.get(i).getId());
                holder.t2.setText(_list.get(i).getRegnum());
    
                return view;
            }
        }
    
        public final class ViewHodler_Footer{
            public TextView foot_text;
        }
    
        public final class ViewHolder{
            public TextView t1;
            public TextView t2;
    
        }
    }
  • 相关阅读:
    1136 A Delayed Palindrome (algorithm reverse(ans.begin,ans.end))
    1141 PAT Ranking of Institutions PAT甲级
    最近点对 (迭代器访问数据)
    1146 Topological Order PAT 甲级
    1151 1151 LCA in a Binary Tree PAT 甲级
    jQuery的基本使用
    案例:移动端返回顶部效果
    移动端轮播图(原生JS写法)
    移动端特效
    本地存储
  • 原文地址:https://www.cnblogs.com/youyuan1980/p/16149971.html
Copyright © 2020-2023  润新知