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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值