【问题标题】:Unable to cast LinearLayoutManager to GridLayoutManager无法将 LinearLayoutManager 转换为 GridLayoutManager
【发布时间】:2016-11-09 19:33:56
【问题描述】:
if (mLayoutManager instanceof GridLayoutManager) {
                        ((GridLayoutManager) mLayoutManager).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                            @Override
                            public int getSpanSize(int position) {
                                return listResultAdapter.isHeaderOrFooter(position) ? ((GridLayoutManager) mLayoutManager).getSpanCount() : 1;
                            }
                        });
                    }

上面的代码崩溃了,说 java.lang.ClassCastException: android.support.v7.widget.LinearLayoutManager cannot be cast to android.support.v7.widget.GridLayoutManager

我发现下面一行导致崩溃

((GridLayoutManager) mLayoutManager).getSpanCount()

有什么办法可以避免崩溃

mLayoutManager 被声明为 LinearLayoutManager

【问题讨论】:

  • 顺便说一句,为什么将mLayoutManager 声明为LinearLayoutManager 却将其用作GridLayoutManager
  • 这怎么可能?
  • 实际上我尝试过这样做,但是当我调用 notifydataset 更改时它崩溃了我尝试使用 gridlayoutmanager setspancount

标签: android android-recyclerview android-support-library linearlayoutmanager


【解决方案1】:

你也应该在getSpanSize里面做类检查:

public int getSpanSize(int position) {
     return mLayoutManager instanceof GridLayoutManager && listResultAdapter.isHeaderOrFooter(position) 
             ? ((GridLayoutManager) mLayoutManager).getSpanCount() : 1;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 2015-01-13
    相关资源
    最近更新 更多