Android基于ListView实现类似Market分页加载效果示例
本文实例讲述了Android基于ListView实现类似Market分页加载效果。分享给大家供大家参考,具体如下:
最近几天研究ListView实现分页加载和滚动加载,发现可以用listView的OnScroll方法来实现,直接上代码
ListViewScroll.java
packagezy.lucifer.ListViewScroll;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.util.Log;
importandroid.view.Gravity;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.AbsListView;
importandroid.widget.BaseAdapter;
importandroid.widget.LinearLayout;
importandroid.widget.ListView;
importandroid.widget.ProgressBar;
importandroid.widget.TextView;
importandroid.widget.Toast;
importandroid.widget.AbsListView.OnScrollListener;
importandroid.widget.LinearLayout.LayoutParams;
publicclassListViewScrollextendsActivity{
/**Calledwhentheactivityisfirstcreated.*/
privateLayoutParamsmLayoutParams=newLinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
/**
*设置布局显示目标最大化属性
*/
privateLayoutParamsFFlayoutParams=newLinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT);
ListViewlistView;
privateintlastItem=0;
LinearLayoutloadingLayout;
privatelistViewAdapteradapter;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView=(ListView)findViewById(R.id.myList);
Log.i("test","onCreate(BundlesavedInstanceState)>>>>>>>>>>>>>>>");
//线性布局
LinearLayoutlayout=newLinearLayout(this);
//设置布局水平方向
layout.setOrientation(LinearLayout.HORIZONTAL);
//进度条
ProgressBarprogressBar=newProgressBar(this);
//进度条显示位置
progressBar.setPadding(0,0,15,0);
//把进度条加入到layout中
layout.addView(progressBar,mLayoutParams);
//文本内容
TextViewtextView=newTextView(this);
textView.setText("加载中...");
textView.setGravity(Gravity.CENTER_VERTICAL);
//把文本加入到layout中
layout.addView(textView,FFlayoutParams);
//设置layout的重力方向,即对齐方式是
layout.setGravity(Gravity.CENTER);
//设置ListView的页脚layout
loadingLayout=newLinearLayout(this);
loadingLayout.addView(layout,mLayoutParams);
loadingLayout.setGravity(Gravity.CENTER);
listView.addFooterView(loadingLayout);
adapter=newlistViewAdapter();
listView.setAdapter(adapter);
listView.setOnScrollListener(newOnScrollListener(){
@Override
publicvoidonScroll(AbsListViewview,intfirstVisibleItem,
intvisibleItemCount,inttotalItemCount){
//TODOAuto-generatedmethodstub
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作条件
intscrolllength=101;
if(adapter.count<=scrolllength){
if(firstVisibleItem+visibleItemCount==totalItemCount){
adapter.count+=10;
adapter.notifyDataSetChanged();
listView.setSelection(lastItem);
intcurrentPage=adapter.count/10;
Toast.makeText(getApplicationContext(),"第"+currentPage+"页",Toast.LENGTH_LONG).show();
}
}
else{
listView.removeFooterView(loadingLayout);
}
}
@Override
publicvoidonScrollStateChanged(AbsListViewview,intscrollState){
//TODOAuto-generatedmethodstub
}
});
}
classlistViewAdapterextendsBaseAdapter{
intcount=10;/*startingamount*/
publicintgetCount(){
returncount;
}
publicObjectgetItem(intpos){
returnpos;
}
publiclonggetItemId(intpos){
returnpos;
}
publicViewgetView(intpos,Viewv,ViewGroupp){
Log.i("test","getView>>>pos:"+pos);
TextViewview;
if(v==null){
view=newTextView(ListViewScroll.this);
}else{
view=(TextView)v;
}
view.setText("ListItem"+pos);
view.setTextSize(20f);
view.setGravity(Gravity.CENTER);
view.setHeight(60);
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" > <ListViewandroid:cacheColorHint="#00000000"android:id="@+id/myList" android:layout_width="fill_parent"android:layout_height="fill_parent" > </ListView> </LinearLayout>
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android视图View技巧总结》、《Android布局layout技巧总结》、《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。