本文共 3650 字,大约阅读时间需要 12 分钟。
分析了一下网上讲的滑动分页效果,我看用户体验不错,就模拟了一个如图
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; } } }转载地址:http://jwefb.baihongyu.com/