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的高度占满剩余空间就行了。

以上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章