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的高度佔滿剩餘空間就行了。

以上。

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