今天在用AppBarLayout+CollapsingToolbarLayout+Toolbar+NestedScrollView 实现折叠工具栏的时候遇到个问题,做下总结, 错误信息如下:
java.lang.ClassCastException:
android.view.ViewGroup$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
at android.widget.GridView.onMeasure(GridView.java:1047)
at android.view.View.measure(View.java:16896)at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5413)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1616)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:729)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:601)
at android.view.View.measure(View.java:16896)
at android.support.v4.widget.NestedScrollView.measureChildWithMargins(NestedScrollView.java:1415)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:332)
at android.support.v4.widget.NestedScrollView.onMeasure(NestedScrollView.java:480)
at android.view.View.measure(View.java:16896)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5413)
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:668)
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:735)
at android.view.View.measure(View.java:16896)
...................................
错误内容很明显,类型转换异常。
之前在5.0以上手机运行都正常,今天换了个4.4的设备就报上面的错误,错误明显发生在at android.widget.GridView.onMeasure(GridView.java:1047)这个一行,和GridView 有关,后来想起了adapter 的getView中有动态设置布局的LayoutParams地方,应该问题就出在这里。
代码如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
try {
ViewHolder mHolder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.mine_menu_service_item_view, null);
mHolder = new ViewHolder();
mHolder.ivPluginPic = (ImageView) convertView.findViewById(R.id.iv_plugin_pic);
mHolder.tvPluginName = (TextView) convertView.findViewById(R.id.tv_plugin_name);
convertView.setTag(mHolder);
} else {
mHolder = (ViewHolder) convertView.getTag();
}
//item的宽度和高度
ViewGroup.LayoutParams params=new ViewGroup.LayoutParams(mPluginViewWidth,mPluginViewHeight);
convertView.setLayoutParams(params);
去掉上面这段标红的代码问题就消失了,最终在item的布局中添加了一层容器,动态修改这个容的高度,问题解决了。。。