您的位置:首页 > 移动开发 > Android开发

android 滑动分页

2010-08-17 10:11 716 查看
分析了一下网上讲的滑动分页效果,我看用户体验不错,就模拟了一个如图





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;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: