滑动后自动加载基础详解OnScrollListener

/**
 * ListView 分页加载
 * 1:通过底部按钮点击实现
 *
 * 没有ListView没有加底部视图就只需操作onScrollStateChanged
 *
 * 需要底部视图解开注释即可,并且要把onScrollStateChanged注释
 *
 * 流程图???ListView分页加载
 * 1:ListView填充数据(适配器,数据源)
 * 2:两种实现方式
 *      方式1:通过底部按钮点击(当我数据加载完成的时候按钮还要吗???(当我数据加载完成时把底部视图干调))
 *          ListView.addFooterView(View)
 *          View需要加载一个视图(自己定义)
 *          然后点击加载数据?
 *          数据怎么加?在原来的基础上加载  参考我们加载方法
 *          如何监听滑动?(一个接口)
 *          ListView的滑动接口 OnScrollListener
 *          两个方法
 *         方法1: onScrollStateChanged(自动加载的)
 *         方法2:onScroll(点击加载)
 *       方式2:自动加载(每次滑动到最底部时直接执行加载方法即可)
 * 3:看效果
 *

 *
 *
 *
 *
 *
 *
 *
 *
 *
 */
public class Main2Activity extends Activity implements View.OnClickListener, AbsListView.OnScrollListener {


    private ListView list;
    private ArrayList<String> arr = new ArrayList<String>();
    private Context con = Main2Activity.this;
    private MyAdapter adapter;
    //在底部添加的那个视图
    private View mView;
    private Button mLoadMore;
    private ProgressBar mPro;
    private int mMaxSize = 38;
    private Handler mHandler = new Handler();
    private int mLastIndex;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        initBottemView();
        initViwe();
        initDate();
        initAdapter();
    }


    //实例化底部视图
    private void initBottemView() {
        mView = getLayoutInflater().inflate(R.layout.bottem_moban, null);
        mLoadMore = (Button) mView.findViewById(R.id.Load_More_Btn);
        mLoadMore.setOnClickListener(this);
        mPro = (ProgressBar) mView.findViewById(R.id.Load_More_Pro);
    }


    //实例化适配器
    private void initAdapter() {
        adapter = new MyAdapter(con, arr);
        list.setAdapter(adapter);
        //监听ListView的滑动事件
        list.setOnScrollListener(this);


    }


    //加载十条数据
    private void initDate() {
        for (int i = 0; i < 10; i++) {
            arr.add("这是第" + i + "条数据");
        }
    }


    //加载ListView组件
    private void initViwe() {
        list = (ListView) findViewById(R.id.list);
        //在listView最底部加载一个视图模板
//        list.addFooterView(mView);
    }


    private void LoadMore() {
        int count = adapter.getCount();
        if (mMaxSize >= (count + 10)) {
            for (int i = count; i <= count + 10; i++) {
                arr.add("这是第" + i + "条数据");
            }
            //当数据发生变化  需要刷新
            adapter.notifyDataSetChanged();
            Log.e("看看代码执行", "==========");
        } else {
            for (int i = count; i <= mMaxSize; i++) {
                arr.add("这是第" + i + "条数据");
            }
            //当数据发生变化  需要刷新
            adapter.notifyDataSetChanged();
            Log.e("看看代码执行", "==========");
        }
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.Load_More_Btn:
                //setVisibility设置视图是否隐藏的属性
                //三个属性1:GONE让这个视图隐藏  位置也消失
                //三个属性2:invisible也是隐藏但是位置还在
                //三个属性3:visible让视图可见


                mLoadMore.setVisibility(View.GONE);
                mPro.setVisibility(View.VISIBLE);
                mHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        LoadMore();
                    }
                }, 2000);


                break;
        }
    }


    //得到滑动的状态


    /**
     * scrollState:即滑动的状态。分为三种 0,1,2
     =0 表示停止滑动的状态 SCROLL_STATE_IDLE
     =1表示正在滚动,用户手指在屏幕上 SCROLL_STATE_TOUCH_SCROLL
     =2表示正在滑动。用户手指已经离开屏幕 SCROLL_STATE_FLING
     * @param view
     * @param scrollState
     */
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        //当我这个ListView 静止的时候
        Log.e("adapter.getCount",adapter.getCount()+"");
        Log.e("mLastIndex",mLastIndex+"");
        if(scrollState==0&&adapter.getCount()==mLastIndex){
//            mLoadMore.setVisibility(View.VISIBLE);
//            mPro.setVisibility(View.GONE);
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    LoadMore();
                }
            }, 2000);
        }
    }
    //滑动是做的操作


    /**
     * firstVisibleItem:当前屏幕能见的第一个item的position从0开始
     * visibleItemCount:当前屏幕显示的item总数,不完全显示也算
     * totalItemCount:listview的item总数
     */
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        mLastIndex = totalItemCount;
//        Log.e("参数一:firstVisibleItem", firstVisibleItem + "");
//        Log.e("参数二:visibleItemCount", visibleItemCount + "");
//        Log.e("参数三:totalItemCount", totalItemCount + "");
//        if(totalItemCount==mMaxSize+2){
//            list.removeFooterView(mView);
//        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值