ListView添加页尾功能实现

最近遇到一个项目需求是:
在列表的底部添加几句话。
当列表不足一屏时,需要放在页面底部;
如下图:
这里写图片描述
当列表一屏多时,需要放在最后一条数据的下面;
如下图:
这里写图片描述

如果只是使用ListView的addFooterView(View view)是无法满足需求的,因为在不满一屏时,这个view是会跟在上面而不会置底。所以需要我们动手计算一下高度。代码如下:

private ListView mListView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_footer);
        mListView = (ListView) findViewById(R.id.listView);
        //添加数据
        List<ChartBean> list = new ArrayList<>();
        for (int i = 0; i < 50; i++) {
            ChartBean bean = new ChartBean();
            bean.setDate("这是第 " + (i + 1) + " 行");
            list.add(bean);
        }
        //这是一个普通的adapter
        ListFooterAdapter adapter = new ListFooterAdapter(this, list);
        mListView.setAdapter(adapter);

        mListView.post(new Runnable() {
            @Override
            public void run() {
                BottomView bottomView = new BottomView(ListFooterActivity.this);
                //页面的height = 屏幕height - 状态栏height
                int activityHeight = ScreenTools.getInstance(ListFooterActivity.this).getScreenHeight() - ScreenTools.getInstance(ListFooterActivity.this).getStatusBarHeight();
                //当不满一屏时,获取listview到页面底部的高度差
                int bottomViewHeight = activityHeight - mListView.getBottom();
                if (bottomViewHeight > ScreenTools.getInstance(ListFooterActivity.this).dip2px(85)) {
                //85是我要添加的View的粗略高度dp值,重新赋值给bottomView
                    bottomView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, bottomViewHeight));
                }
                mListView.addFooterView(bottomView);
            }
        });
    }

其实说白了就是只关心页面不足一屏时,让BottomView的高度占满剩余空间就行了。

以上。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值