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

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

本文实例讲述了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程序设计有所帮助。

标签:Android,ListView,Market,分页加载
0
投稿

猜你喜欢

  • Mybatis-Plus 多表联查分页的实现代码

    2023-11-25 04:59:07
  • 基于spring boot 的配置参考大全(推荐)

    2021-11-28 23:32:41
  • C#中使用强制类型实现字符串和ASCII码之间的转换

    2022-05-15 14:57:48
  • C# .NET中Socket简单实用框架的使用教程

    2023-09-16 07:59:19
  • Android使用PhotoView实现图片双击放大单击退出效果

    2022-10-10 04:52:11
  • springboot中的springSession的存储和获取实现

    2023-11-04 10:23:14
  • SpringBoot如何获取Kafka的Topic列表

    2023-11-26 16:01:52
  • .Net Winform开发笔记(四)透过现象看本质

    2022-06-22 09:36:24
  • java二维数组遍历的2种代码

    2022-05-03 08:52:50
  • 如何使用BufferedReader循环读文件

    2022-04-20 17:32:23
  • Java深入讲解instanceof关键字的使用

    2023-02-27 13:05:05
  • C# 特殊的string类型详解

    2022-02-10 14:11:59
  • Java线程池submit阻塞获取结果的实现原理详解

    2021-08-29 03:55:45
  • Android之获取手机内部及sdcard存储空间的方法

    2022-11-11 13:10:18
  • Java环境配置图文教程(推荐)

    2023-09-17 11:27:42
  • C语言根据协议分割获取字符串单元的实现代码

    2023-06-21 08:20:27
  • springcloud中RabbitMQ死信队列与延迟交换机实现方法

    2023-05-04 04:25:54
  • Mono for Android 实现高效的导航(Effective Navigation)

    2023-09-05 21:39:56
  • C# 打开电子邮件软件的具体方法

    2022-07-02 10:53:07
  • Java使用动态规划算法思想解决背包问题

    2022-12-02 03:53:49
  • asp之家 软件编程 m.aspxhome.com