博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 滑动分页
阅读量:2230 次
发布时间:2019-05-09

本文共 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/

你可能感兴趣的文章
搞懂分布式技术13:缓存的那些事
查看>>
搞懂分布式技术14:Spring Boot使用注解集成Redis缓存
查看>>
搞懂分布式技术15:缓存更新的套路
查看>>
搞懂分布式技术16:浅谈分布式锁的几种方案
查看>>
搞懂分布式技术17:浅析分布式事务
查看>>
搞懂分布式技术18:分布式事务常用解决方案
查看>>
搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务
查看>>
搞懂分布式技术20:消息队列因何而生
查看>>
搞懂分布式技术21:浅谈分布式消息技术 Kafka
查看>>
后端技术杂谈1:搜索引擎基础倒排索引
查看>>
后端技术杂谈2:搜索引擎工作原理
查看>>
后端技术杂谈3:Lucene基础原理与实践
查看>>
后端技术杂谈4:Elasticsearch与solr入门实践
查看>>
后端技术杂谈5:云计算的前世今生
查看>>
后端技术杂谈6:白话虚拟化技术
查看>>
后端技术杂谈7:OpenStack的基石KVM
查看>>
后端技术杂谈8:OpenStack架构设计
查看>>
后端技术杂谈9:先搞懂Docker核心概念吧
查看>>
后端技术杂谈10:Docker 核心技术与实现原理
查看>>
夯实Java基础系列2:Java自动拆装箱里隐藏的秘密
查看>>