|
项目结构如图所示:
项目主要包括一个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 >
|
项目运行结果如下图:
点击更多,十条,依次类推:
----------------------------
原文链接:https://blog.51cto.com/2736766/640330
程序猿的技术大观园:www.javathinker.net
[这个贴子最后由 flybird 在 2020-06-06 15:39:00 重新编辑]
|
|