Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

addFooterView后会导致adapter去getViewHolder的时候空指针 #2

Closed
h3clikejava opened this issue Nov 12, 2014 · 3 comments
Closed

Comments

@h3clikejava
Copy link

vh = (ViewHolder) view.getTag();
当数据正好超过一屏幕的时候,自己定义的Adapter中,使view重用的这句会nullpoint
这个问题依然存在,我关闭的原因是可以通过不addFooterView规避。

@liaohuqiu
Copy link
Owner

Yes, this is a problem. Do you know how to fix it?

@h3clikejava h3clikejava reopened this Nov 14, 2014
@h3clikejava
Copy link
Author

空指针的原因是如果add了footerView且最后一行item不足列数的时候会新创建一个view补足。
然后第二次滑到这个补足的view的时候会把当前的convertView传到adapter里面去获得最后一个item的高度。但是这个convertView是不包含需要的viewHolder的,所以空指针了。
详见GridViewHeaderAndFooter.java的540行。
View view = mAdapter.getView(lastPos, convertView, parent);
这里应该判断一下,如果convertView是为了补足行数而创建的view,就直接传空值进去。
代码还有一个错误的地方也是这里,这里获取的view绝大多数情况,特别是数据刚刚超过一个屏幕的时候获取的view.getHeight()回传的值是0,会导致列表不能画全。解决的办法有很多,比如算出view的高度之后再给补足的convertView setMinimumHeight。当然要看你怎么权衡了。
这种给GridView加头和加尾的方式,其实Google是不推荐的,应该从设计的角度去避免,当然遇到脑残的喜欢抄袭ios的设计师也没办法

最后,大家都是中国人,没必要在这秀英文吧。特别是用Google自动翻译的英文....

@h3clikejava h3clikejava changed the title addHeaderView后会导致adapter去getViewHolder的时候空指针 addFooterView后会导致adapter去getViewHolder的时候空指针 Nov 14, 2014
@liaohuqiu
Copy link
Owner

Currently, this issue has been fixed. It will be great if you review the code and propose more suggestion. Thank you for your feedback and suggestion, I really appreciate that. 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants