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;
}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值