自己做ListView的下拉刷新和自动加载更多

首先主布局文件是SwipeRefreshLayout+ListView

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context="com.yus.litepaldemo.MainActivity">

   <android.support.v4.widget.SwipeRefreshLayout
       android:id="@+id/swp"
       android:layout_width="match_parent"
       android:layout_height="match_parent">

       <ListView
           android:id="@+id/lv"
           android:layout_width="match_parent"
           android:layout_height="match_parent">
       </ListView>
   </android.support.v4.widget.SwipeRefreshLayout>

</RelativeLayout>

加载更多作为脚布局添加到ListView

        lv = (ListView) findViewById(R.id.lv);
        View footView = View.inflate(getApplicationContext(), R.layout.loading, null);
        ll_loading_detail = (LinearLayout) footView.findViewById(R.id.ll_loading_detail);
        tvNoMoreData = (TextView) footView.findViewById(R.id.tvNoMoreData);
        lv.addFooterView(footView);
        myAdapter = new MyAdapter();
        lv.setAdapter(myAdapter);
        lv.setOnScrollListener(this);

ListView的滚动状态监听,在这里判断是否已经滑到当前的最后一条item

@Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
            if (view.getLastVisiblePosition() == view.getCount() - 1) {//最后一条
                Log.d("alan","add5Item--");
                add5Item();
            }
        }
    }

到当前最后一条后,加载5条数据,加载四次后,模拟没有更多数据的情况

private void add5Item() {
        currentLoadTime++;
        if (currentLoadTime>NO_MORE_DATA){
            return;
        }
        for (int i = 0; i < 5; i++) {
            mLists.add("new");
        }
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (currentLoadTime>=NO_MORE_DATA){
                    tvNoMoreData.setVisibility(View.VISIBLE);
                    ll_loading_detail.setVisibility(View.GONE);
                }
                myAdapter.notifyDataSetChanged();
            }
        }, 200);
    }

在这里处理刷新:

    @Override
    public void onRefresh() {
        Log.d("alan","刷新---");
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                swp.setRefreshing(false);
            }
        }, 700);
    }

下拉刷新和自动加载更多就做好了,这算是一种简单方便的实现方式。

RefreshLoadMore.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容