软件编程
位置:首页>> 软件编程>> Android编程>> Android基于ListView实现类似Market分页加载效果示例

Android基于ListView实现类似Market分页加载效果示例

作者:老码农豆豆  发布时间:2021-10-01 10:44:32 

标签:Android,ListView,Market,分页加载

本文实例讲述了Android基于ListView实现类似Market分页加载效果。分享给大家供大家参考,具体如下:

最近几天研究ListView实现分页加载和滚动加载,发现可以用listView的OnScroll方法来实现,直接上代码

ListViewScroll.java


package zy.lucifer.ListViewScroll;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;
import android.widget.LinearLayout.LayoutParams;
public class ListViewScroll extends Activity {
 /** Called when the activity is first created. */
 private LayoutParams mLayoutParams = new LinearLayout.LayoutParams(
     LinearLayout.LayoutParams.WRAP_CONTENT,
     LinearLayout.LayoutParams.WRAP_CONTENT);
 /**
  * 设置布局显示目标最大化属性
  */
 private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams(
     LinearLayout.LayoutParams.FILL_PARENT,
     LinearLayout.LayoutParams.FILL_PARENT);
 ListView listView ;
 private int lastItem = 0;
 LinearLayout loadingLayout;
 private listViewAdapter adapter;
 @Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);
   listView = (ListView) findViewById(R.id.myList);
   Log.i("test", "onCreate(Bundle savedInstanceState)>>>>>>>>>>>>>>>");
   // 线性布局
   LinearLayout layout = new LinearLayout(this);
   // 设置布局 水平方向
   layout.setOrientation(LinearLayout.HORIZONTAL);
   // 进度条
   ProgressBar progressBar = new ProgressBar(this);
   // 进度条显示位置
   progressBar.setPadding(0, 0, 15, 0);
   // 把进度条加入到layout中
   layout.addView(progressBar, mLayoutParams);
   // 文本内容
   TextView textView = new TextView(this);
   textView.setText("加载中...");
   textView.setGravity(Gravity.CENTER_VERTICAL);
   // 把文本加入到layout中
   layout.addView(textView, FFlayoutParams);
   // 设置layout的重力方向,即对齐方式是
   layout.setGravity(Gravity.CENTER);
   // 设置ListView的页脚layout
   loadingLayout = new LinearLayout(this);
   loadingLayout.addView(layout, mLayoutParams);
   loadingLayout.setGravity(Gravity.CENTER);
   listView.addFooterView(loadingLayout);
   adapter = new listViewAdapter();
   listView.setAdapter(adapter);
   listView.setOnScrollListener(new OnScrollListener() {
     @Override
     public void onScroll(AbsListView view, int firstVisibleItem,
         int visibleItemCount, int totalItemCount) {
       // TODO Auto-generated method stub
       Log.i("test" , "Scroll>>>first: " + firstVisibleItem + ", visible: " + visibleItemCount + ", total: " + totalItemCount);
       lastItem = firstVisibleItem + visibleItemCount - 1;
       Log.i("test" , "Scroll>>>lastItem:" + lastItem);
       //显示50条ListItem,即0-49,因为onScroll是在“滑动”执行过之后才触发,所以用adapter.count<=41作条件
       int scrolllength=101;
       if (adapter.count<=scrolllength) {
         if (firstVisibleItem+visibleItemCount==totalItemCount) {
           adapter.count += 10;
           adapter.notifyDataSetChanged();
           listView.setSelection(lastItem);
           int currentPage=adapter.count/10;
           Toast.makeText(getApplicationContext(), "第"+currentPage+"页", Toast.LENGTH_LONG).show();
         }
       }
       else {
          listView.removeFooterView(loadingLayout);
       }
     }
     @Override
     public void onScrollStateChanged(AbsListView view, int scrollState) {
       // TODO Auto-generated method stub
     }
   });
 }
 class listViewAdapter extends BaseAdapter {
   int count = 10; /* starting amount */
   public int getCount() {
     return count;
   }
   public Object getItem(int pos) {
     return pos;
   }
   public long getItemId(int pos) {
     return pos;
   }
   public View getView(int pos, View v, ViewGroup p) {
     Log.i("test", "getView>>>pos:" + pos);
     TextView view;
     if (v == null) {
       view = new TextView(ListViewScroll.this);
     } else {
       view = (TextView) v;
     }
     view.setText("ListItem " + pos);
     view.setTextSize(20f);
     view.setGravity(Gravity.CENTER);
     view.setHeight(60);
     return view;
   }
 }
}

main.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
<ListView android:cacheColorHint="#00000000" android:id="@+id/myList"
android:layout_width="fill_parent" android:layout_height="fill_parent"
   >
 </ListView>
</LinearLayout>

希望本文所述对大家Android程序设计有所帮助。

0
投稿

猜你喜欢

  • 1.插入排序这个打麻将或者打扑克的很好理解, 比如有左手有一副牌1,2,4,7 ,来一张3的牌, 是不是就是手拿着这张牌从右往左插到2,4之
  • 本文实例讲述了Java算法之最长公共子序列问题(LCS)。分享给大家供大家参考,具体如下:问题描述:一个给定序列的子序列是在该序列中删去若干
  • Reflections通过扫描classpath,索引元数据,并且允许在运行时查询这些元数据。使用Reflections可以很轻松的获取以下
  • WPF在样式定义和UI动画上面相对于以前的技术有了不少的提升,下面给出WPF技术实现钟表的效果:1、Visual Studio新建一个WPF
  • 本文实例为大家分享了C#实现简单的计算器功能的具体代码,供大家参考,具体内容如下环境:VS2010及以上版本1、建立个Window窗体应用2
  • 一、引言在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文
  • 导语相信大家无论是做前端还是做后端的,都被接口接口文档所折磨过,前端抱怨接口文档和后端给的不一致,后端抱怨写接口文档很麻烦,所以Swagge
  • 首先先简单的说一下其3大特性的定义:封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。将抽象得到的数据和
  • 如下面代码以交灯为示例:public class Test {     public static
  • MyBaties的基本配置标签1-全局配置文件(xxx.properties)引入的两种方式resource:引入类路径下的资源url:引入
  • 第一节 JAVA条件语句之if语句1.单独的if语句,语法:if(条件){条件成立时执行的代码};如果if成立时执行的语句只有一条,可以省略
  • 本文实例为大家分享了Java实现简易俄罗斯方块的具体代码,供大家参考,具体内容如下一、将对象抽象为类首先考虑俄罗斯方块游戏中含有哪些具体的对
  • 本文实例为大家分享了C#生成Word文件的具体代码,供大家参考,具体内容如下通过Microsoft.Office.Interop.Word生
  • Swing包的介绍Java基础类数据库(Java Foundation Class)给java应用程序增加了图形界面、丰富的功能性以及与用户
  • Java面向对象编程之多态一.对于多态的理解:通俗点理解,多态其实就是一词多义,就是一种方法的多种状态,即不同的类对象,调用同一个方法名,有
  • 题目要求阅读理解读完题的我be like:去看了遍英文版就懂了,题目中的种类【type】不是种类数&hellip;&hell
  • dll的编写,首先是打开VS新建一个C++的控制台程序,下一步后选择dll以及空文档即可。然后就是添加一个类添加一个方法。方法排头固定格式
  • Redis是一个高效的内存数据库,它支持包括String、List、Set、SortedSet和Hash等数据类型的存储,在Redis中通常
  • 使用范围synchronized使用上用于同步方法或者同步代码块在锁实现上是基于对象去实现使用中用于对static修饰的便是class类锁使
  • 实现流程初始化一定数量的任务处理线程和缓存线程池,用户每次调用接口,开启一个线程处理。假设初始化5个处理器,代码执行 BlockingQue
手机版 软件编程 asp之家 www.aspxhome.com