Android ListView滑动加载
16lz
2021-01-23
项目结构如图所示:
项目主要包括一个activity和三个xml页面布局,代码如下:
MainActivity.java
- packagecom.android.ray.activity;
- importandroid.app.ListActivity;
- importandroid.os.Bundle;
- importandroid.os.Handler;
- importandroid.view.LayoutInflater;
- importandroid.view.View;
- importandroid.view.ViewGroup;
- importandroid.widget.AbsListView;
- importandroid.widget.BaseAdapter;
- importandroid.widget.Button;
- importandroid.widget.LinearLayout;
- importandroid.widget.ListView;
- importandroid.widget.TextView;
- importandroid.widget.AbsListView.OnScrollListener;
- publicclassMainActivityextendsListActivityimplementsOnScrollListener{
- privateListViewlistView;
- //全局变量,用来记录ScrollView的滚动状态,1表示开始滚动,2表示正在滚动,0表示停止滚动
- privateintscrollState;
- //可加载记录的条数
- privateintcount=100;
- privateintlastItem;
- //当前可见页面中的Item总数
- privateintvisibleItemCount;
- privateButtonfooterButton;
- privateLinearLayoutfooterProgressBarLayout;
- privateViewview;
- privateListAdaptermAdapter=newListAdapter();
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- //加载主页面布局
- setContentView(R.layout.main);
- LayoutInflaterinflater=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(newView.OnClickListener(){
- publicvoidonClick(Viewv){
- if(lastItem==mAdapter.count&&scrollState==OnScrollListener.SCROLL_STATE_IDLE){
- //设置页面底部布局控件可见性
- footerButton.setVisibility(View.GONE);
- footerProgressBarLayout.setVisibility(View.VISIBLE);
- if(mAdapter.count<=count){
- //使用Handler动态加载数据
- newHandler().postDelayed(newRunnable(){
- publicvoidrun(){
- 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);
- }
- publicvoidonScroll(AbsListViewview,intfirstVisibleItem,
- intvisibleItemCount,inttotalItemCount){
- this.visibleItemCount=visibleItemCount;
- lastItem=firstVisibleItem+visibleItemCount-1;
- if(mAdapter.count>=count){
- listView.removeFooterView(view);
- }
- //booleanloadMore=firstVisibleItem+visibleItemCount>=totalItemCount;
- //if(loadMore){
- //mAdapter.count+=visibleItemCount;
- //mAdapter.notifyDataSetChanged();
- //}
- }
- publicvoidonScrollStateChanged(AbsListViewview,intscrollState){
- this.scrollState=scrollState;
- }
- /**
- *数据匹配器
- *@authorqin_lei
- *
- */
- publicclassListAdapterextendsBaseAdapter{
- intcount=10;
- publicintgetCount(){
- returncount;
- }
- publicObjectgetItem(intposition){
- returnposition;
- }
- publiclonggetItemId(intposition){
- returnposition;
- }
- publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
- LayoutInflaterinflater=LayoutInflater.from(MainActivity.this);
- Viewview=inflater.inflate(R.layout.main_item,null);
- TextViewtv=(TextView)view.findViewById(R.id.tv);
- tv.setText("Hello"+position);
- returnview;
- }
- }
- }
主要布局文件代码如下:
main.xml
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns: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
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns: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
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns: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>
项目运行结果如下图:
点击更多,十条,依次类推:
本文出自 “RayChin” 博客,谢绝转载!
更多相关文章
- 布局(2、相对布局)
- android 设置布局为无标题样式
- Android 解决布局问题
- android卡片布局CardView
- AndroidのUI布局之layout weight
- Android中WebView如何加载JavaScript脚本
- Android预制APP第一次打开时不弹权限提示页面
- Android 异步任务加载图片代码
- Android_布局属性大全