项目结构如图所示:
项目主要包括一个activity和三个xml页面布局,代码如下:
MainActivity.java
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每页加载10条数据,当滑动到页尾时自动加载下面的数据。
Android ListView 滑动分页 分页加载数据
android listview滑动到底部加载更多数据
android Listview分批加载+自动加载改进版(附源码下载) 博客地址:
android Listview下拉刷新 上拉(滑动分页)加载更多 高仿新浪微博下拉刷新,同时实现了滑动加载下一页
android ListView滑动分页加载和点击分页加载,以及复用convertView综合案例
AsyncTask的使用及ListView的常见优化 asyncTask异步加载数据 使用了LruCache优化图片加载 通过滑动监听提高ListView滑动流畅度.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习...
本代码实例实现ListView滑动到底步快速加载,并加入缓存处理功能,仅供参考!
实现了listview滑动删除功能的下拉刷新加载更多功能的整合
* Android下拉刷新自动加载更多 * @author mzba * */ public class PullToRefreshActivity extends ListActivity { private LinkedList, String>> mListItems; private NewsAdapter adapter; private int ...
Android 实现ListView滚动到底部自动加载数据修正版
Android 实现ListView滚动到底部自动加载数据
Android下拉刷新+上拉加载+滑动删除的ListView,简单易用,快速集成到应用。
Android ListView滑动加载
2.监听listview滑动停止事件,获得listview显示的item的最上面和最下面的序号,并唤醒所有加载图片的thread,判断加载图片的序号是否是在范围内,如果是则继续加载,如果不是则结束thread 3.就是把之前的new Thread...
android ListView如果从网络加载图片,直接getView,肯定会阻塞UI导致滑动很不流畅,本实例优化了getView中图片的获取。
①ListView异步加载图片的方式 ②给ImageView设置Tag,解决图片覆盖...④当ListView滚动时不加载图片,滚动停止时才加载图片,从而达到ListView滑动很流畅的效果 ⑤当ListView加载图片时只加载当前屏幕内可见的条目
当列表数据量大的时候我们一半都进行分页,android里分页一半不同于PC端,第几页的方式,一般都是滑动到底部数据自带加载,废话不多数了直接看代码:
Android 自定义ListView实现底部分页刷新与顶部下拉刷新 一.ListView 底部分页加载 整个底部分页加载,主要分一下几步: 1.加载底部自定义View; 2.响应OnScrollListener监听事件,onScroll方法记录最后可见的View ...