iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android实现简单的分批加载ListView
  • 429
分享到

Android实现简单的分批加载ListView

listviewAndroid 2022-06-06 08:06:24 429人浏览 泡泡鱼
摘要

每次滑动至底端,从数据库中获取10条数据,并加载于ListView中 数据库 package com.example.listviewbatchloading; impo

每次滑动至底端,从数据库中获取10条数据,并加载于ListView中

数据库


package com.example.listviewbatchloading; 
import Android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 
public class PersonDb extends SQLiteOpenHelper { 
  public PersonDb(Context context) { 
    super(context, "creature", null, 1); 
    // TODO Auto-generated constructor stub 
  } 
  @Override 
  public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    db.execSQL("create table people(_id integer primary key autoincrement,name char,number char)"); 
  } 
  @Override 
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 
    db.execSQL("drop table people"); 
    onCreate(db); 
  } 
} 

数据库的业务封装,其中获取更多数据的是核心代码


package com.example.listviewbatchloading; 
 
import java.util.ArrayList; 
import java.util.List; 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
public class PersonList { 
  PersonDb personDb; 
  public PersonList(Context context){ 
    this.personDb = new PersonDb(context); 
  } 
   
  public List<Person> getMoreDatas(int startIndex,int num){ 
    List<Person> list = new ArrayList<Person>(); 
    SQLiteDatabase db = personDb.getWritableDatabase(); 
    Cursor cursor = db.rawQuery("select name,number from people order by _id desc limit ?,?", 
        new String[]{startIndex + "",num + ""}); 
    while(cursor.moveToNext()){ 
      Person person = new Person(); 
      person.setName(cursor.getString(cursor.getColumnIndex("name"))); 
      person.setNumber(cursor.getString(cursor.getColumnIndex("number"))); 
      list.add(person); 
    } 
    cursor.close(); 
    db.close(); 
    return list; 
  } 
   
  public void add(String name,String number){ 
    SQLiteDatabase db = personDb.getWritableDatabase(); 
    ContentValues cv = new ContentValues(); 
    cv.put("name", name); 
    cv.put("number", number); 
    db.insert("people", null, cv); 
    db.close(); 
  } 
} 

功能实现


package com.example.listviewbatchloading; 
import java.util.ArrayList; 
import java.util.List; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AbsListView; 
import android.widget.AbsListView.OnScrollListener; 
import android.widget.BaseAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 
public class MainActivity extends Activity { 
  private ListView lv ; 
  private List<Person> datas = new ArrayList<Person>(); 
  private static int PERPAGE = 10; //每页加载数目 
  private static final int FINISH = 0;//数据加载完成 
  private List<Person> moreDatas;//每次加载的数据 
  private MyAdapter adapter; 
  private PersonList personList ; 
  //若数据较多,耗时较长,数据加载完成时,发送FINISH至handler,并通知ListView更新数据 
  private Handler handler = new Handler(){ 
    public void handleMessage(android.os.Message msg) { 
      switch (msg.what) { 
      case FINISH: 
        if (moreDatas.size() != 0) { 
          System.out.println(moreDatas.toString()); 
          adapter.notifyDataSetChanged(); 
        }else { 
          Toast.makeText(MainActivity.this, "没有更多数据", Toast.LENGTH_SHORT).show(); 
        } 
        break; 
      default: 
        break; 
      } 
    }; 
  }; 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    initView(); 
    initData(); 
    initEvent(); 
  } 
   
  private void initEvent() { 
    lv.setOnScrollListener(new OnScrollListener() { 
      @Override 
      public void onScrollStateChanged(AbsListView view, int scrollState) { 
        // TODO Auto-generated method stub 
        if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { 
          int lastVisiblePosition = lv.getLastVisiblePosition(); 
          if (lastVisiblePosition == datas.size() - 1) { 
            initData(); 
            System.out.println("加载更多数据"); 
          } 
        } 
      } 
      @Override 
      public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
        // TODO Auto-generated method stub 
      } 
    }); 
  } 
  private void initView() { 
    setContentView(R.layout.activity_main); 
    lv = (ListView) findViewById(R.id.lv); 
    personList = new PersonList(getApplicationContext()); 
    adapter = new MyAdapter(); 
    lv.setAdapter(adapter); 
  } 
   
  private void initData() { 
    new Thread() { 
      public void run() { 
        // 加载更多数据 
        moreDatas = personList.getMoreDatas(datas.size(), PERPAGE); 
        datas.addAll(moreDatas);// 把一个容器的所有数据加进来 
        // 取数据完成,发消息通知取数据完成 
        handler.obtainMessage(FINISH).sendToTarget(); 
      }; 
    }.start(); 
  } 
  private class ItemView{ 
    private TextView tv_name; 
    private TextView tv_num; 
  } 
   
  private class MyAdapter extends BaseAdapter{ 
    @Override 
    public int getCount() { 
      // TODO Auto-generated method stub 
      return datas.size(); 
    } 
    @Override 
    public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return null; 
    } 
    @Override 
    public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return 0; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
      ItemView itemView = null; 
      if (convertView == null) { 
        itemView = new ItemView(); 
        convertView = View.inflate(getApplicationContext(), R.layout.item_lv, null); 
        itemView.tv_name = (TextView) convertView.findViewById(R.id.tv_name); 
        itemView.tv_num = (TextView) convertView.findViewById(R.id.tv_num); 
        convertView.setTag(itemView); 
      }else { 
        itemView = (ItemView) convertView.getTag(); 
      } 
      Person person = datas.get(position); 
      itemView.tv_name.setText(person.getName()); 
      itemView.tv_num.setText(person.getNumber()); 
      return convertView; 
    } 
  } 
} 

其他Person的JavaBean,以及布局文件,不在赘述

您可能感兴趣的文章:Android实现Listview异步加载网络图片并动态更新的方法Android ListView异步加载图片方法详解Android实现ListView异步加载图片的方法Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案Android程序开发ListView+JSON+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不错乱)Android实现上拉加载更多以及下拉刷新功能(ListView)基于Android ListView之加载使用技巧Android实现ListView分页自动加载数据的方法Android ListView实现上拉加载更多和下拉刷新功能Android实现ListView异步加载的方法(改进版)


--结束END--

本文标题: Android实现简单的分批加载ListView

本文链接: https://www.lsjlt.com/news/25423.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android实现ListView分页加载数据
    本文实例为大家分享了ListView分页加载数据的具体代码,供大家参考,具体内容如下 FenyeActivity package com.example.myapplicatio...
    99+
    2024-04-02
  • Android怎么实现ListView分页加载数据
    本篇内容介绍了“Android怎么实现ListView分页加载数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!FenyeActivityp...
    99+
    2023-06-25
  • Android实现简单的加载进度条
    本文实例为大家分享了Android实现简单的加载进度条的具体代码,供大家参考,具体内容如下 1.效果图 2.自定义progressBar package com.example...
    99+
    2024-04-02
  • Android ListView实现简单列表功能
    ListView如何实现简单列表,供大家参考,具体内容如下效果图:啥也没干的ListView张这样:fry.Activity01package fry;import com.example.ListView.R;import android...
    99+
    2023-05-30
    listview 列表 roi
  • Android ListView实现ImageLoader图片加载的方法
    本文实例讲述了Android ListView实现ImageLoader图片加载的方法。分享给大家供大家参考,具体如下:最近一直忙着做项目,今天也是忙里偷闲,想写篇博客来巩固下之前在应用中所用的知识。之前我们可能会也会肯定遇到了图片的异步加...
    99+
    2023-05-30
    android listview imageloader
  • Android如何实现简单的加载进度条
    这篇文章将为大家详细讲解有关Android如何实现简单的加载进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系统,主要...
    99+
    2023-06-14
  • Android简单实现文件下载
    本文实例为大家分享了Android简单实现文件下载的具体代码,供大家参考,具体内容如下 权限 <!-- 文件读写权限 --> <uses-permissio...
    99+
    2024-04-02
  • Android开发中利用ListView怎么实现一个分页加载功能
    这期内容当中小编将会给大家带来有关Android开发中利用ListView怎么实现一个分页加载功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体如下:package eoe.listview;impo...
    99+
    2023-05-31
    android 分页加载 listview
  • Android中怎么利用ListView实现下拉加载功能
    Android中怎么利用ListView实现下拉加载功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。MyListView.Javapublic class&nb...
    99+
    2023-05-30
    listview android
  • Vue怎么实现分批加载数据
    本篇内容主要讲解“Vue怎么实现分批加载数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue怎么实现分批加载数据”吧!分批加载数据最近在写vue的项目,因为后台返回的数据量太大,在调用了高德...
    99+
    2023-06-30
  • Vue如何实现分批加载数据
    目录分批加载数据滚动加载数据分批加载数据 最近在写vue的项目,因为后台返回的数据量太大,在调用了高德地图渲染"polygon"覆盖物的时候处理不过来,直接蹦掉了...
    99+
    2024-04-02
  • Android自定义ListView实现下拉刷新上拉加载更多
    目录1、创建刷新控件1.1、创建头部View1.2、下拉事件1.3、接口回调2、上拉加载更多2.1、底部样式2.2、布局添加Listview现在用的很少了,基本都是使用Recycle...
    99+
    2024-04-02
  • AndriodStudio使用listview实现简单图书管理
    本文实例为大家分享了使用listview实现简单图书管理的具体代码,供大家参考,具体内容如下 在主类布局文件中只需要一个listview即可 <xml version="1.0...
    99+
    2024-04-02
  • Android实现加载圈
    开发过程中经常用到加载圈,特别是车机开发由于外设不同很多操作响应的等待时长经常要用到不同的加载圈。 首先,直接上菊花效果图,这是我直接从项目里面截取下来的。 核心代码 import...
    99+
    2024-04-02
  • Android适配器Adapter与ListView和RecycleView的简单使用
    目录适配器ListView的简单用法关于ListView性能的优化ListView的鼠标监听事件RecyclerView的简单用法在使用ListView和RecycleView之前,...
    99+
    2023-05-19
    Android适配器Adapter Android ListView Android RecycleView
  • Android实现一个简单的单词本
    目录布局设计代码AddDanciActivity.javaDBOpenHelper.java效果图总结本文基于Java实现了一个简单的单词本安卓app,用的是SQLite数据库,包括...
    99+
    2024-04-02
  • JavaScript实现简单MD5加密的脚本分享
    目录1.什么是MD5加密2.为什么要使用MD5加密3.实现代码1.什么是MD5加密 MD5消息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密...
    99+
    2022-11-13
    JavaScript MD5加密 JavaScript MD5 JavaScript 加密
  • Android Socket通信的简单实现
    公司要实现一个简单的聊天功能,提前研究一下Socket通信,而公司的服务端功能又没有实现,所以这里就把服务端的功能放到一个界面实现了。 直接上代码: <?xml v...
    99+
    2024-04-02
  • vue项目实现图片懒加载的简单步骤
    目录1、安装vue-lazyload插件2、在main.js中进行引用3、使用(将图片设置为懒加载)总结1、安装vue-lazyload插件 npm install vue-lazy...
    99+
    2024-04-02
  • PHP实现加减乘除最简单的实例分享
    本文的重点就是如何创建一个PHP类来实现两个数间的加减乘除,这种类似于极简单的计算器功能。 实现起来是非常简单的,继续往下看: 这里简单给大家介绍一下构造函数和private和pub...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作