精华内容
下载资源
问答
  • android移动开发,分页加载数据实例,介绍了listView上拉如何加载数据
  • 主要为大家详细介绍了Android之ListView分页加载数据功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 小程序通过数据库读取数据一次最多读取20条,云函数一次最多读取100条,所以如果我们要读取更多的数据就要借助分页加载,通过分次的加载数据,然后将每次获取到的数据拼接起来,就可以在页面显示更多的数据。...
  • 熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们今天就要讲一讲列表组件ListView加载数据的相关内容。通常来说,一个应用在...
  • 微信小程序分页加载数据 一般小程序做分页加载数据,会做一些下拉加载更多、然后上拉刷新的操作。数据放在一个for循环里去加载,数据源是一个数组对象。在加载下一页数据时,将下一页的数据拼到当前数组后面。这样...
  • 通过分页分次加载数据,用户看多少就去加载多少。 通常这也分为两种方式,一种是设置一个按钮,用户点击即加载。另一种是当用户滑动到底部时自动加载。今天我就和大家分享一下这个功能的实现。 首先,写一个xml文件...
  • 主要介绍了vue实现的上拉加载更多数据/分页功能,涉及基于vue的事件响应、数据交互等相关操作技巧,需要的朋友可以参考下
  • 熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们今天就要讲一讲列表组件ListView加载数据的相关内容。通常来说,一个应用在...
  • // 计算当前共加载了多少条数据,来证明这种方式可以加载更多数据 var totalDataCount = that.data.totalDataCount; totalDataCount = totalDataCount + list.length; that.setData({ ["dataArray[" + page + "]"]:...

    wxml页面

    <block wx:for="{{dataArray}}" wx:for-item="list" wx:key="data">
        <block wx:for="{{list}}" wx:key="list">
            <view>内容</view>
        </block>
    </block>

    js页面

    onLoad: function(){  this.getList();},
    
      // 页面上拉触底事件的处理函数 
      onReachBottom: function() {
       this.next()
     },
    
    //请求第一页数据
    getList: function() {
        var that = this;
        var page = 0
        that.setData({
              dataArray: []
        })
        app.util.request({
              'url': '*****',
              'data': {
                page: 0, 
              },
              success: function(res) {
                var list= res.data.data
                var totalDataCount = list.length;  
                that.setData({
                  ["dataArray["+page+"]"]: list,   
                  page: page,     
                  totalDataCount: totalDataCount   
                })
              }
            })
          },
        })
      },    
    //请求下一页数据
    next : function(){
      var page = that.data.page;
       page += 1;
       app.util.request({
         'url': '*****',
         'data': {
           page: page,
         },
         success: function(res) {
           var list = res.data.data;
           // 计算当前共加载了多少条数据,来证明这种方式可以加载更多数据
           var totalDataCount = that.data.totalDataCount;
           totalDataCount = totalDataCount + list.length;
           that.setData({
             ["dataArray[" + page + "]"]: list,
             page: page,
             totalDataCount: totalDataCount
           })
         }
       })  
    }

    原博文解释更详细一些,以上是根据第二种方法实现的:https://www.jianshu.com/p/066c062845e9

    展开全文
  • SQL分页加载数据

    2017-12-23 20:48:09
    最近两天看了sql分页加载数据,然后自己也动手敲了一遍,今天整理了下思路,便写篇博客来加深下印象。 把整个项目的代码回顾一遍。大致把流程分为: 新建一个类继承SQLiteOpenHelper。在这里我们可以设计表的字段名...

    最近两天看了sql分页加载数据,然后自己也动手敲了一遍,今天整理了下思路,便写篇博客来加深下印象。
    把整个项目的代码回顾一遍。大致把流程分为:

    1. 新建一个类继承SQLiteOpenHelper。在这里我们可以设计表的字段名,一般情况我们会用另外一个常量类来保存这些字段名,可能是显得比较有层次感和条理性。创建数据库对象之后首先执行onCreate()方法,这里我们可以设计出来表,然后通过execSQL()方法执行。在这里说一下,对数据库进行操作,我们既可以使用Android 提供的API工具,同时还可以使用SQL语法。于我而言,喜欢先用SQL语句,如果SQL语句出现的错误很久也没解决出来,再尝试用API来操作。(自己确实遇见过这情况)。另外,除了建立一个常量类来保存字段外,我们还可以通过一个管理类来对数据库进行操作,我们通常不直接实例 继承SQLiteOpenHelper的类,而是通过管理类的单例模式来实例化对象,这样可以保证实例化的对象只有一个,不浪费内存。
    2. 主活动里面的操作。我们在主活动里面往数据库插入数据,我们简单的用for循环来往表里插入几十组数据,然后查询数据展示到手机页面里面。这里我们通过点击“查询数据”来展示插入的数据,页面上首先显示的数据是分页加载里面第一页的数据,注意这是两个部分互不关联,我在这里首先实现的是点击按钮显示数据,然后又是分页加载数据,只是页面不太简约
    3. 123
    4. 点击“查询按钮”显示全部数据。通过SQL语句来查询表中的全部数据,然后在管理类里面封装一个方法可以执行SQL查询语句,并且返回Cursor结果集,要想展示出来,我们还需要一个实体类和数据库的字段一一对应,所以再新建一个实体类,我们这里打算用ListView来展示数据。所以我们还需要一个适配器。总结下来,用listView控件展示数据的步骤就是:实体类–>适配器—>操作的类(在哪一个类里面使用ListView控件)。适配器里面我们具体要写的就是getView()方法。最后在操作的类里面实例化适配器对象,然后通过ListView控件的setAdapter()方法将数据与控件联系起来。这里我们也可以用API来查询数据表,这样我们得到的直接就是Cursor结果集。
    5. 分页加载数据的操作。分页加载数据,我们首先要确定一共有多少条数据,设置每页需要展示多少条数据,还要一空需要多少页。比如这里我设置一页展示两条数据,所以,就出现了图片的那样,如果你滚动下数据就可以发现特点了。确定多少条数据的方法我封装在了管理类里面,实际上就是,把实现方法集中在一个类里面,这样的话,整体结构显的清晰。实际上此方法就是查询数据库里面的所有数据返回Cursor对象,然后调用size()方法得到数据总数。得到数据总数之后就可以得到总页数。我们还需要定义默认为第一页,然后就是查询第一页的数据。然后在管理类里面封装一个方法来返回第一页的数据。
    6. 滚动加载数据为ListView控件设置监听事件,我们需要在两个方法里面添加逻辑,简单来说就是本页数据加载完毕后继续加载第二页直到加载完全部数据。

    项目整体的过程已经分析了一遍,在这里面管理类实际上是核心部分。这里我把项目demo贡献一下。

    展开全文
  • Listview分页加载数据.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 但是有上千条用户数据,一次性查询加载会导致页面有很长时间(大概4~5s)的空白期,用户体验很不友好。 故需要进行优化,针对这个问题,网上解决方案也挺多的,此处参考 ...

    项目场景:

    在公司管理后台需要有一个 根据选择客户筛选拥有的服务 的功能

    问题描述:

    但是有上千条用户数据,一次性查询加载会导致页面有很长时间(大概4~5s)的空白期,用户体验很不友好。
    故需要进行优化,针对这个问题,网上解决方案也挺多的,此处参考 https://juejin.cn/post/6844903710972182536 解决方案,根据项目做了部分减配

    解决方案:

    一方面优化MySQL查询语句,另一方面前端分页查询数据。
    本文主要讲述如何修改 ElementUI 的el-select 组件支持分页查询数据

    定义指令

    # directives/index.js
    
    import Vue from 'vue'
    export default () => {
        Vue.directive('el-select-scroll', {
            bind(el, binding) {
                // 获取滚动页面DOM
                let SCROLL_DOM = el.querySelector('.el-select-dropdown .el-select-dropdown__wrap')
                let scrollPosition = 0
                SCROLL_DOM.addEventListener('scroll', function () {
                    // 当前的滚动位置 减去  上一次的滚动位置
                    // 如果为true则代表向上滚动,false代表向下滚动
                    let flagToDirection = this.scrollTop - scrollPosition > 0
                    // console.log(flagToDirection ? '滚动方向:下' : '滚动方向:上')
    
                    // 记录当前的滚动位置
                    scrollPosition = this.scrollTop
    
                    // 记录滚动位置距离底部的位置,在滚动位置距离滚动页面底部一定高度时在触发,例如距页面底部只有100px时触发handleScroll事件
                    const LIMIT_BOTTOM = 10
                    let scrollBottom = this.scrollHeight - (this.scrollTop + this.clientHeight) < LIMIT_BOTTOM
                    // 如果已达到指定位置则触发
                    // 如果向下滚动 并且距离底部只有10px
                    if (flagToDirection && scrollBottom) {
                        // 将滚动行为告诉组件
                        binding.value(flagToDirection)
                    }
                    // 如果是向上滚动  并且距离顶部只有100px
                    if (!flagToDirection && this.scrollTop < LIMIT_BOTTOM) {
                        binding.value(flagToDirection)
                    }
    
                })
            }
        })
    }
    
    

    vue中引入指令

    # app.js
    
    import directive from "./directives";
    Vue.use(directive)
    

    el-select 加入新指令 el-select-scroll

    <template>
    	<el-select v-model="searchForm.user_id" v-el-select-scroll="handleScroll" size="mini" :loading="loadStatus" :placeholder="placeholder" value-key="id" @focus="handleFocus">
    	    # 搜索框
    	    <el-input type="text" size="mini" v-model="queryKeyword" @keydown.enter.native="remoteSearch" placeholder="回车搜索客户,按字母排序"></el-input>
    	    # 下拉列表数据
    	    <el-option v-for="(el,key) in ownUserList" :key="key" :label="formatLabel(el)" :value="el.id"></el-option>
    	</el-select>
    
    </template>
    
    <script>
    export default {
      name: "app-selectOwnUser",
      data() {
        return {
          searchForm: { user_id: "" },
          ownUserList: [],
          loadStatus: false,
          pageNum: 1,
          queryKeyword: "",
        };
      },
      methods: {
      	ajaxGetInfo(pageNum = this.pageNum){
          this.loadStatus = true
          let params = {
              page: pageNum
          }
          get("api/user/lists", params).then(res => {
            this.loadStatus = false
            if (res.errcode) {
              this.$message({
                showClose: true,
                message: res.msg,
                type: "error"
              });
              return false;
            }
            this.ownUserList = this.ownUserList.concat(res.data);
          });
        },
    	handleFocus(){
    		/**
    		 * select 获取焦点时,重置参数
    		 *  
             */
            this.queryKeyword = "";
            this.ownUserList = [];
            this.ajaxGetInfo(1);
        },
        handleScroll(param){
            /*
             * 处理滚动行为
             * param: 滚动行为
             *  true 向下滚动
             *  false 向上滚动
             */
            // console.log(param)
            // 此处判断 !this.queryKeyword 是防止在搜索关键词的结果上追加数据
            // 在后台判断关键词长度,至少要输入2个关键字,才可搜索
            // 否则,还是会出现查询时间长的情况
            if(param && !this.queryKeyword){
                // 请求下一页数据
                this.ajaxGetInfo(++this.pageNum)
            }
        },
        remoteSearch(){
            let params={
                keyword: this.queryKeyword
            }
            this.loadStatus = true
            get("api/user/lists", params).then(res => {
                this.loadStatus = false
                if (res.errcode) {
                    this.$message({
                        showClose: true,
                        message: res.msg,
                        type: "error"
                    });
                    return false;
                }
                this.ownUserList = res.data;
          });
        },
      }
    }
    </script>
    
    
    展开全文
  • ListView分页加载数据

    2016-06-16 08:04:46
    ListView分页加载数据ListView分页加载 在Android中是一个经常用到的技术,当我们需要加载大量的数据到列表显示时,假如一次性把所有数据加载完毕,可能会导致整个ListView列表卡顿,给用户的体验也非常不好。...

    ListView分页加载数据

    ListView分页加载 在Android中是一个经常用到的技术,当我们需要加载大量的数据到列表显示时,假如一次性把所有数据加载完毕,可能会导致整个ListView列表卡顿,给用户的体验也非常不好。因而,我们可以将数据分为多次加载,每次加载其中的一部分,用户有需求的时候再加载其他部分,这样的设计会更加友好。

    ListView分页原理

    在日常开发中,我们可能会遇到以下两种情况:

    • 服务器支持分页请求,简单地说,比如,我们总共要请求100条数据,服务器支持我们每次请求N条数据,我们可以分100 / N 次请求完成,并且这些数据有一定的顺序,我们想请求第几页的数据就可以请求第几页的数据(这种情况下,我们可以实现真正的分页加载数据)。
    • 服务器不支持分布请求,我们没办法请求指定页的数据,只能一次性请求所有数据(这种情况下,我们只能自己处理,每次加载相应数目数据到ListView中)。

    那么ListView分页原理就是,我们不一次性加载所有的数据,每次加载N条,然后我们监听ListView的滚动事件,当ListView滚动到最底部时,判定当前是否已加载完所有数据,如果未加载完毕,请求新一页的数据,直至所有的数据加载完成。

    Demo实现

    一般情况下,我们需要请求服务器的数据,但是这里我们只是要达到ListView分页加载的效果,我们自己模拟数据加载过程。
    首先是我们的主页面MainActivity,其对应的页面文件activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.hotzhi.listviewtest.MainActivity">
    
        <ListView
            android:id="@+id/lv_data"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fastScrollEnabled="false"
            android:smoothScrollbar="true"
            android:cacheColorHint="#00000000"
            android:divider="#ffcccccc"
            android:dividerHeight="0.2dp" />
    
    </RelativeLayout>
    

    这里没啥好介绍的,就只是一个ListView。接下来是,我们将ListView拖动到底部时,如果要加载新的数据,那么我们可以添加一个footerView,以更好的提示用户,下面是其布局文件,foot_view.xml

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ffffff" >
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:baselineAligned="true"
            android:gravity="center|center_vertical"
            android:orientation="horizontal"
            android:paddingBottom="15dp"
            android:paddingTop="15dp" >
    
            <ProgressBar
                android:id="@+id/progressBar_id"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:gravity="center"
                style="?android:attr/progressBarStyleSmall"
                android:paddingBottom="2dp"
                android:paddingTop="2dp" />
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="10dp"
                android:gravity="center"
                android:text="加载更多中……"
                android:textSize="13sp" />
        </LinearLayout>
    
    </FrameLayout>
    

    也非常简单,就一个加载框,然后一个提示文本。
    下面就是我们的具体实现了,MainActivity.java

    package com.hotzhi.listviewtest;
    
    import android.os.Bundle;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.view.LayoutInflater;
    import android.widget.AbsListView;
    import android.widget.ArrayAdapter;
    import android.widget.FrameLayout;
    import android.widget.ListView;
    import android.widget.Toast;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
    
        /** 列表翻页每页加载数目 */
        private static final int ONE_PAGE_ITEM_COUNT = 20;
        // 由于这里是测试数据,我们自己控制所有数据请求的结束位置,也就是页数达到MAX_PAGE无法再次请求数据。
        /** 最大页数(测试) */
        private static final int MAX_PAGE = 8;
    
        private List<String> lstData = new ArrayList<>();
        private ArrayAdapter<String> mAdapter;
        private ListView lvData;
    
        /** 当前页码 */
        public int iCurPageIndex = 0;
        /** 列表第一项 */
        private int firstItem;
        /** 列表可见项 */
        private int visibleItem;
        /** 列表可见项 */
        private int totalItem;
        /** 是否可以上拉 */
        private boolean canUpPull = true;
        /** 是否正在加载 */
        private boolean isLoading = false;
        /** 页脚布局 */
        private FrameLayout mFooterView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            findViews();
            setListeners();
            initData();
    
        }
    
        private void findViews() {
            lvData = (ListView) findViewById(R.id.lv_data);
            mFooterView = (FrameLayout) LayoutInflater.from(this).inflate(R.layout.foot_view, null);
        }
    
        private void setListeners() {
            lvData.setOnScrollListener(onScrollListener);
        }
    
        private void initData() {
            requestData();
        }
    
        /**
         * ListView滚动监听器
         */
        private AbsListView.OnScrollListener onScrollListener = new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
    
                if (firstItem + visibleItem == totalItem) {
    
                    // 当前处于不可上拉加载状态,不可继续请求数据
                    if(!canUpPull) {
                        return ;
                    }
    
                    // 数据正在加载,不可继续请求
                    if(isLoading) {
                        return ;
                    }
    
                    lvData.addFooterView(mFooterView);
                    lvData.setSelection(lvData.getBottom());
                    isLoading = true;
                    iCurPageIndex++;
                    requestData();
                }
            }
    
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                firstItem = firstVisibleItem;
                visibleItem = visibleItemCount;
                totalItem = totalItemCount;
            }
        };
    
        /**
         * 请求加载更多数据
         * 如,请求服务器数据
         */
        private void requestData() {
    
            // 这里我们休眠3秒钟,相当于3秒钟后数据才加载完毕
            // 当然我们在实际项目中可能不需要休眠处理,直接请求数据等待数据返回即可。
            new Thread() {
                public void run() {
                    try {
                        Thread.sleep(3000);
                        // 主线程中加载数据
                        handler.sendEmptyMessage(0);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }.start();
    
        }
    
        private android.os.Handler handler = new android.os.Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
    
                // 加载数据
                // 加载第iCurPageIndex页数据
                for(int i = iCurPageIndex * ONE_PAGE_ITEM_COUNT; i < (iCurPageIndex + 1) * ONE_PAGE_ITEM_COUNT; i++) {
                    lstData.add("第" + i + "条数据");
                }
    
                // 数据加载完毕设置相应标志
                isLoading = false;
                canUpPull = true;
                lvData.removeFooterView(mFooterView);
    
                // 这里我们通过判断加载页位置与最大可加载页比较判断,是否已加载完所有数据
                if(iCurPageIndex >= MAX_PAGE) {
                    canUpPull = false;
                    if(iCurPageIndex > 0) {
                        Toast.makeText(MainActivity.this, "已到达最后一页!", Toast.LENGTH_SHORT).show();
                    }
                }
    
                if(mAdapter == null) {
                    mAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, lstData);
                    lvData.setAdapter(mAdapter);
                } else {
                    mAdapter.notifyDataSetChanged();
                }
            }
        };
    }
    
    展开全文
  • NULL 博文链接:https://flyingsir-zw.iteye.com/blog/1530727
  • 整理文档,搜刮出一个微信小程序分页加载的代码,稍微整理精简一下做下分享。 分页加载功能大家遇到的应该会经常遇到,应用场景也很多,例如微博,QQ,微信朋友圈以及新闻类应用,都会有分页加载的功能,这不仅节省...
  • 一页20条数据,下拉滑动到底部时加载数据 关键点:给listview设置滚动监听,当滚动状态变化,且最后一个可见listitem(lv.getLastVisiblePosition())的位置等于listview的长度则加载数据
  • 原文链接: ... 内容: 我们在开发小程序时,一个列表里难免会有很多条数据,比如我们一个列表有1000条数据,我们一下加载出来,而不做分页,将会严重影响...所以这一节,我们来讲讲小程序分页加载数据的实现。 ...
  • vue 实现分页加载数据

    2018-05-07 17:32:00
    这时需要实现分页加载: 1:定义一个点击事件 2:定义page 3: 4: 5: desc: 判断数据是否重复:无则添加,有就不添加。否则点击会无限加载数据 https://www.jianshu.com/p/ddb31f19b5dc 转...
  • <script> export default { data() { return { ... //分页请求数据 getData(){ if(this.haseMore) { uni.showLoading({ title: '加载中...' }) wx.cloud.d
  • vue页面滚动条分页加载数据

    千次阅读 2020-05-19 12:14:53
    // 滚动条外容器的高度 if (st + ch >= sh-20) { //快到底时----加载 if(this.total && this.list.length 1.需要判断滚动条是否到底部: 需要用到DOM的三个属性值,即scrollTop、clientHeight、scrollHeight。 ...
  • 微信小程序分页加载数据

    万次阅读 2018-06-15 10:13:36
    在使用类似qq,微博或者新闻类等数据量大的应用经常会遇到分页加载功能,它不仅的应用场景广,还能挺高用户体验。微信小程序中也可以分页加载数据,这篇文章就是介绍微信小程序怎么制作分页加载数据。要实现这样的...
  • 来自授权地址上拉加载(分页加载)当用户打开一个页面时,假设后台数据量庞大时,一次性地返回所有数据给客户端,页面的打开速度就会有所下降,而且用户只看上面的内容而不需要看后面的内容时 ...       加载更多...
  • data数据 ... LOCK_STATUS: false, //当在请求数据时,滚动时锁定不能再发送分页请求 datas: []//临时存储数据 } }, 加载数据请求:默认第一个,一页家在10条 async getApplyData(type) { thi.
  • 通常我们会在页尾做一个几十像素高的“正在加载中...”,这样的话,可以把这个div的高度设为infinite-scroll-distance的值即可。 vue-infinite-scroll有时候会失效: | 失效解决办法: 把v-if 换成v-show 
  • jQuery点击分页加载数据内容效果代码
  • SQL分页加载数据demo

    2017-12-23 22:09:19
    SQL分页加载数据demoSQL分页加载数据demoSQL分页加载数据demoSQL分页加载数据demo

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 232,405
精华内容 92,962
关键字:

分页加载数据