ListView添加删除FooterView java.lang.Class Cast Exception: android.widget.HeaderViewListAdapter

来源:互联网 发布:java cp 目录结构 编辑:程序博客网 时间:2024/05/01 11:43


 通过代码可以看到:

    /**
     * Removes a previously-added footer view.
     *
     * @param v The view to remove
     * @return
     * true if the view was removed, false if the view was not a footer view
     */
    public boolean removeFooterView(View v) {
        if (mFooterViewInfos.size() > 0) {
            boolean result = false;
            if (mAdapter != null && ((HeaderViewListAdapter) mAdapter).removeFooter(v)) {
                if (mDataSetObserver != null) {
                    mDataSetObserver.onChanged();
                }
                result = true;
            }
            removeFixedViewInfo(v, mFooterViewInfos);
            return result;
        }
        return false;
    }


原因便是我们的适配器 不能转为这个类别。

那么我们如何处理呢?

查看setAdapter 代码看到:

        if (mHeaderViewInfos.size() > 0|| mFooterViewInfos.size() > 0) {
            mAdapter = new HeaderViewListAdapter(mHeaderViewInfos, mFooterViewInfos, adapter);
        } else {
            mAdapter = adapter;
        }


关键判断:

  这个便是如果在setAdapter之前,list使用 addFooterView addHeaderView 进行增加过view,

此时便会将Adapter 包装为HeaderViewListAdapter 类别,随后便会ok。


因此我们保证如下顺序调用:


listView.addHeaderView (view);

  getListView().setAdapter(adapter);

listView.RemoveFooterView(view);

这样子操作后,后期RemoveFooterView这个便不会用问题了。





0 0
原创粉丝点击