ListView的滑动加载
来源:互联网 发布:宰执天下知乎 编辑:程序博客网 时间:2024/05/16 13:58
项目结构如图所示:
项目主要包括一个activity和三个xml页面布局,代码如下:
MainActivity.java
- package com.android.ray.activity;
- import android.app.ListActivity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AbsListView;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- import android.widget.LinearLayout;
- import android.widget.ListView;
- import android.widget.TextView;
- import android.widget.AbsListView.OnScrollListener;
- public class MainActivity extends ListActivity implements OnScrollListener {
- private ListView listView;
- //全局变量,用来记录ScrollView的滚动状态,1表示开始滚动,2表示正在滚动,0表示停止滚动
- private int scrollState;
- //可加载记录的条数
- private int count = 100;
- private int lastItem;
- //当前可见页面中的Item总数
- private int visibleItemCount;
- private Button footerButton;
- private LinearLayout footerProgressBarLayout;
- private View view;
- private ListAdapter mAdapter = new ListAdapter();
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- //加载主页面布局
- setContentView(R.layout.main);
- LayoutInflater inflater = LayoutInflater.from(this);
- //加载底部布局
- view = inflater.inflate(R.layout.main_more, null);
- footerButton = (Button) view.findViewById(R.id.button);
- footerProgressBarLayout = (LinearLayout) view.findViewById(R.id.linearlayout);
- footerProgressBarLayout.setVisibility(View.GONE);
- //更多按钮点击事件
- footerButton.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- if(lastItem == mAdapter.count && scrollState == OnScrollListener.SCROLL_STATE_IDLE){
- //设置页面底部布局控件可见性
- footerButton.setVisibility(View.GONE);
- footerProgressBarLayout.setVisibility(View.VISIBLE);
- if(mAdapter.count <= count){
- //使用Handler动态加载数据
- new Handler().postDelayed(new Runnable() {
- public void run() {
- mAdapter.count += 10;
- mAdapter.notifyDataSetChanged();
- listView.setSelection(lastItem - visibleItemCount + 1);
- //获取数据成功设置Layout不可见,Button设为可见
- footerButton.setVisibility(View.VISIBLE);
- footerProgressBarLayout.setVisibility(View.GONE);
- }
- } , 2000);
- }
- }
- }
- });
- listView = getListView();
- //将布局添加到ListView的Footer中
- listView.addFooterView(view);
- listView.setAdapter(mAdapter);
- //设置滑动监听
- listView.setOnScrollListener(this);
- }
- public void onScroll(AbsListView view, int firstVisibleItem,
- int visibleItemCount, int totalItemCount) {
- this.visibleItemCount = visibleItemCount;
- lastItem = firstVisibleItem + visibleItemCount - 1;
- if(mAdapter.count >= count){
- listView.removeFooterView(view);
- }
- // boolean loadMore = firstVisibleItem + visibleItemCount >= totalItemCount;
- // if(loadMore){
- // mAdapter.count += visibleItemCount;
- // mAdapter.notifyDataSetChanged();
- // }
- }
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- this.scrollState = scrollState;
- }
- /**
- * 数据匹配器
- * @author qin_lei
- *
- */
- public class ListAdapter extends BaseAdapter{
- int count = 10;
- public int getCount() {
- return count;
- }
- public Object getItem(int position) {
- return position;
- }
- public long getItemId(int position) {
- return position;
- }
- public View getView(int position, View convertView, ViewGroup parent) {
- LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
- View view = inflater.inflate(R.layout.main_item, null);
- TextView tv = (TextView) view.findViewById(R.id.tv);
- tv.setText("Hello " + position);
- 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:id="@android:id/list"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"/>
- </LinearLayout>
main_more.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">
- <Button
- android:id="@+id/button"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="更多"/>
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:id="@+id/linearlayout">
- <ProgressBar
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="正在获取..."/>
- </LinearLayout>
- </LinearLayout>
ListView单个显示item布局main_item.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:scaleType="fitXY"
- android:src="@drawable/icon_head"/>
- <TextView
- android:id="@+id/tv"
- android:layout_width="fill_parent"
- android:layout_height="20dp"
- android:text="@string/hello"/>
- </LinearLayout>
项目运行结果如下图:
点击更多,十条,依次类推:
- ListView的滑动加载
- Android ListView滑动加载
- Android listView 滑动加载
- android 滑动加载listview
- listView滑动加载更多
- Android【 ListView】滑动数据加载
- android listView滑动加载数据
- listView滑动加载数据代码
- listview滑动不加载图片
- android 中listview滑动加载的简单demo
- 【ListView】动态加载之一:滑动加载
- listview 滑动不加载,停止加载问题
- Android ListView&异步加载的学习(四)——完善ListView滑动效率问题
- 个人记录1-解决listview异步加载图片错位,滑动listview错乱抖动的问题
- listview 滑动的时候不加载图片,,,停止的时候加载图片
- Glide结合Recyclerview(Listview)实现列表滑动的时候图片不加载,滑动停止的时候加载
- ListView的滑动删除
- 横向滑动的 ListView
- 七夕恋歌
- 9-20队内练习赛 G题 Convex Hull of Lattice Points (来自HDU 3285原题)
- 赵雅智_Java 泛型
- 求解CSDN为啥贴图显示不出来
- C#中的 int?是什么意思
- ListView的滑动加载
- strtok_r函数研究
- 背包问题
- 存储类型
- 解说C++条件编译
- 常用Web控件
- UITableViewCell的背景
- android EditText输入属性
- 假如我是铁路订票系统架构师系列计划