Android中的分页加载

时间:2022-12-17 13:54:34

//----------------------MainActivity中---------------------------------------------------

package com.example.fenye;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {
    //每次加载的数量
    private final int PAGE_NUMBER=15;
    //index第几条目
    private int index=0;
    
    private List<String> list=new ArrayList<String>();

private ListView listview;
    private MyAdapter adapter;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找到控件Listview
        listview = (ListView) findViewById(R.id.listview);
        
        //设置Listview的滚动监听
        listview.setOnScrollListener(new OnScrollListener() {
            
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                //判断如果滚动停止时
                if (scrollState==OnScrollListener.SCROLL_STATE_IDLE) {
                    //如果滚到到了最下面一行
                    if (view.getLastVisiblePosition()==list.size()-1) {
                        //从新赋值
                        index=index+PAGE_NUMBER;
                        //吐司提醒
                        Toast.makeText(MainActivity.this, "加载中...", 0).show();
                        //重新加载数据
                        getData();
                    }
                }
                
            }
            
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                
                
            }
        });
        
        //加载数据
        getData();
        
    }

//加载数据
    private void getData() {
        new Thread(){
            public void run() {
                //index第几条目
                for (int i = index; i < index+PAGE_NUMBER; i++) {
                    list.add("我是条目"+i);
                }
            };
        }.start();
        
        //每次加载的数量
        try {
            //延迟1秒
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //若果适配器为空,就创建适配器
        if (adapter==null) {
            adapter = new MyAdapter(list, this);
            listview.setAdapter(adapter);
        }else{
            //刷新适配器
            adapter.notifyDataSetChanged();
        }
        
    }

}

//------------------------main.xml布局文件中-----------------------------

<ListView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listview"></ListView>

//-------------------适配器----创建一个类继承----BaseAdapter---------------------------------------------

package com.example.fenye;

import java.util.List;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter{
    private List<String> list;
    private Context context;

public MyAdapter(List<String> list, Context context) {
        super();
        this.list = list;
        this.context = context;
    }

@Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

@Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return list.get(position);
    }

@Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView==null) {
            convertView=View.inflate(context, R.layout.list_item, null);
            
        }
        TextView tv_name=(TextView) convertView.findViewById(R.id.tv_name);
        tv_name.setText(list.get(position));
        
        return convertView;
    }

}

//-----------------list_item.xml布局文件中-----------------------------------------

<ImageView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"/>
    <TextView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv_name"/>

//================以上是自动加载===========================================

//==============下面做一下手动加载=====只需要在=onCreate的方法中修改一下,如下:=================

/*
 * 手动加载在Listview中用到listview.addFooterView(view),把button添加到Listview的最下面,
 * 点击时,重新赋值和重新加载数据
 */

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//找到控件Listview
        listview = (ListView) findViewById(R.id.listview);

//找到button的布局
        View view=getLayoutInflater().inflate(R.layout.button_footer, null);
        //把控件button添加到Listview的下面
        listview.addFooterView(view);
        Button button=(Button) view.findViewById(R.id.button);
                                    
        //加载数据
        getData();
        button.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                //重新赋值
                index=index+PAGE_NUMBER;
                //吐司提示
                Toast.makeText(MainActivity.this, "加载中...", 0).show();
                //加载数据
                getData();
                
            }
        });
        
    }

//---------------button_footer.xml布局文件中------------------

<Button android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:text="点击加载"/>

Android中的分页加载的更多相关文章

  1. Android中ListView分页加载数据

    public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...

  2. arcgis android 中shapefile的加载

    前言 本文为大家分享arcgis android 中shapefile的加载,默认你有java环境,懂一定的android基础知识,默认你已经安装android studio.如缺乏以上环境和知识,请 ...

  3. java攻城狮之路&lpar;Android篇&rpar;--widget&lowbar;webview&lowbar;metadata&lowbar;popupwindow&lowbar;tabhost&lowbar;分页加载数据&lowbar;菜单

    一.widget:桌面小控件1 写一个类extends AppWidgetProvider 2 在清单文件件中注册: <receiver android:name=".ExampleA ...

  4. Android中的动态加载机制

    在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势.本 ...

  5. Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案

    我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图片错位.重复.闪烁等问题,其实这些问题总结起来就是一个问题,我们需要对这些问题进行ListView的优化. 比如L ...

  6. Android中的Glide加载图片

    注意:在Android Studio的项目的build.gradle中添加: compile 'com.github.bumptech.glide:glide:3.6.1' 然后同步一下 目录: 使用 ...

  7. Android中ListView动态加载数据

    1. 引言: 为了提高ListView的效率和应用程序的性能,在Android应用程序中不应该一次性加载ListView所要显示的全部信息,而是采取分批加载策略,随着用户的滑动,动态的从后台加载所需的 ...

  8. Android中一张图片加载后所占用内存大小的获取与测试

    Android程序中一旦加载的图片比较多,就有可能出现Out of Memory而导致程序崩溃.这个一方面是因为Android系统本身对于每个单独的进程有内存大小的限制(有16M,64M,128M,2 ...

  9. Android中使用POI加载与显示word文档

    最近打算实现一个功能:在Android中加载显示Word文档,当然这里不是使用外部程序打开.查看一些资料后,打算采用poi实现,确定了以下实现思路: 将ftp中的word文档下载到本地. 调用poi将 ...

随机推荐

  1. 【2016-10-28】【坚持学习】【Day15】【Oracle】【变量 定义 使用】

    declare i integer ; j ; begin i :; dbms_output.put_line(j); end

  2. elk系列5之syslog的模块使用

    preface rsyslog是CentOs系统自带的的一个日志工具,那么我们就配置logstash来接受rsyslog的日志. logstash的syslog模块 linux-node2上操作 lo ...

  3. 1&period;Maven的安装以及本地仓库的配置

    安装: maven下载地址:http://maven.apache.org/release-notes-all.html 然后解压,配置环境变量   MAVEN_HOME,并添加到path中.验证是否 ...

  4. mysql如何修改所有的definer

    mysql中的definer是什么,有什么作用? 我们在mysql创建view.trigger.function.procedure.event时都会定义一个Definer=‘xxx’,类似如下: C ...

  5. What is the best way to handle Invalid CSRF token found in the request when session times out in Spring security

    18.5.1 Timeouts One issue is that the expected CSRF token is stored in the HttpSession, so as soon a ...

  6. Maven常用命令:

    Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ 一,Maven常用命令: 1. 创建Maven的 ...

  7. 前端开发【第1篇:HTML】

    HTML初识 1.什么是HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都 ...

  8. Freemarker实例教程

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任.作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/a ...

  9. 进程间协作---wait&comma;notify&comma;notifyAll

    转自牛客网的一篇评论,解释的十分详细 在 Java 中,可以通过配合调用 Object 对象的 wait() 方法和 notify()方法或 notifyAll() 方法来实现线程间的通信.在线程中调 ...

  10. 使用selenium前学习HTML&lpar;3&rpar;— 属性

    <!-- HTML标签可以拥有属性,属性提供元素的更多的信息: 属性总是以名称/值对的形式出现,比如:name="value". 属性总是在 HTML 元素的开始标签中规定. ...