android 滑动分页
分析了一下网上讲的滑动分页效果,我看用户体验不错,就模拟了一个如图
package com.my.activity;
import com.my.R;
import com.my.R.string;
import android.app.ListActivity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.AbsListView.OnScrollListener;
/**
*****滑动分页******
*实现原理: 通过手指的滑动,判断数据大小 然后动态改变数据,底部的加载是一个view
*
* @author owen
*@2010-8-17
*@上午09:29:07
*/
public class FenYeListActivity extends ListActivity implements OnScrollListener {
private static final String TAG = "**********FenYeListActivity.java*********";
private ItemAdapter adapter;
private int lastItem = 0;
private int mProgressStatus = 0;
private Handler mHandler = new Handler();
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
LinearLayout searchLayout = new LinearLayout(this);
//水平方向的线性布局
searchLayout.setOrientation(LinearLayout.HORIZONTAL);
//添加进展条
progressBar = new ProgressBar(this);
progressBar.setPadding(0, 0, 15, 0);
searchLayout.addView(progressBar, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
//添加文字,设置文字垂直居中
TextView textView = new TextView(this);
textView.setText(R.string.app_loading);
textView.setGravity(Gravity.CENTER_VERTICAL);
searchLayout.addView(textView, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT));
//同时将进展条和加载文字显示在中间
searchLayout.setGravity(Gravity.CENTER);
LinearLayout loadingLayout = new LinearLayout(this);
loadingLayout.addView(searchLayout, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
loadingLayout.setGravity(Gravity.CENTER);
//加载到listActivity的底部
getListView().addFooterView(loadingLayout);
registerForContextMenu(getListView());
adapter = new ItemAdapter();
setListAdapter(adapter);
getListView().setOnScrollListener(this);
}
/**
* firstVisbleItem 第一个可见的item
* visibleItemCount 可见的Item个数
* totalItemCount 总的个数
* lastItem 可见状态中,最后一个item
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
Log.i(TAG, "firstVisibleItem="+firstVisibleItem);
Log.i(TAG, "visibleItemCount="+visibleItemCount);
Log.i(TAG, "totalItemCount="+totalItemCount);
lastItem = firstVisibleItem + visibleItemCount - 1 ;
Log.i(TAG, "lastItem:" + lastItem);
}
/**
* 如果视图正在滚动,此方法将被调用之前,滚动下一帧呈现。特别是,它会被调用之前调用getView
*/
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if(lastItem == adapter.count && scrollState == OnScrollListener.SCROLL_STATE_IDLE){
adapter.count += 10;
adapter.notifyDataSetChanged();
}
}
private class ItemAdapter extends BaseAdapter {
int count = 10;
@Override
public int getCount() {
// TODO Auto-generated method stub
return count;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView itemView = new TextView(FenYeListActivity.this);
itemView.setText("item " + position);
itemView.setHeight(90);
return itemView;
}
}
}