1.ListView的footer 布局 item_demo6_list_head.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/footer_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:orientation="horizontal"
>
<ProgressBar
style="?android:attr/progressBarStyleSmall"
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>
2.activity_demo布局(主布局)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Activity.Demo6Activity">
<include layout="@layout/default_nav_head"/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/demo6_lv_id"></ListView>
</LinearLayout>
Demo6Activity(主界面代码)
public class Demo6Activity extends AppCompatActivity {
private ListView listView;
private List<String> data;
private ArrayAdapter<String> adapter;
//分页加载的数据的数量
private int pageSize=10;
private int currentPage = 0;
private final int pageType=1;
//查看更多
private TextView moreTextView;
//正在加载进度条
private LinearLayout loadProgressBar;
private ListView listview ;
//
//用来判断是否加载完成
private boolean loadfinish=true;
private View footerView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo6);
footerView =LayoutInflater.from(this).inflate(R.layout.item_demo6_list_head, null);
footerView.findViewById(R.id.footer_layout).setVisibility(View.GONE);
data = new ArrayList<String>();
addMore();
listView=(ListView) findViewById(R.id.demo6_lv_id);
//添加"加载更多"一定要在设置Adapter之前
adapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
listView.addFooterView(footerView);
listView.setAdapter(adapter);
//当用户滑动listview到最后一项是,动态的加载第二页的数据
listView.setOnScrollListener(new AbsListView.OnScrollListener()
{
public void onScrollStateChanged(AbsListView view, int scrollState)
{
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, final int totalItemCount)
{
//得到listview最后一项的id
int lastItemId=listView.getLastVisiblePosition();
//判断用户是否滑动到最后一项,因为索引值从零开始所以要加上1
if((lastItemId+1)==totalItemCount)
{
footerView.findViewById(R.id.footer_layout).setVisibility(View.VISIBLE);
if(totalItemCount>0)
{
//判断当前页是否超过最大页,以及上一页的数据是否加载完成
if( loadfinish )
{
loadfinish=false;
new Thread(new Runnable()
{
public void run()
{
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
addMore();
//通知listview改变UI中的数据
handler.sendEmptyMessage(0);
}
}).start();
}
}
}
}
});
}
private void addMore(){
for (int i=0;i<pageSize;i++)
{
int position = currentPage*pageSize+i;
data.add(position+"");
}
currentPage ++;
}
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
//改变适配器的数目
// adapter.count += pageSize;
//通知适配器,发现改变操作
adapter.notifyDataSetChanged();
loadfinish=true;
footerView.findViewById(R.id.footer_layout).setVisibility(View.GONE);
break;
default:
break;
}
super.handleMessage(msg);
}
};
}