Closed super-hu closed 6 years ago
都没人维护吗? 我看了源码,不知道为什么所有的item都是走K这个泛型,在loading或者底部布局都返回K。 在不改动源码情况下,在自定义ViewHolder下现在只能K继续返回BaseViewHolder,去重写onCreateDefViewHolder返回自定义的,这样其他的item就不会去找自定义的ViewHoder。 暂时是这样解决的。
收到,最近大家都比较忙,所以回复的不及时。
你的版本是多少?
Caused by: java.lang.IllegalStateException: Required view 'group_title_tv' with ID 2131624257 for field 'groupTitleTv' was not found. If this view is optional add '@Nullable' (fields) or '@Optional' (methods) annotation.`
自定义viewholder里面你的itemView和数据类型绑定应该有问题,提示 itemView的id找不到,请仔细检查数据源和视图view是否绑定正确,如有可能,提供复现demo 以供排除问题
@CymChad 最新的 @AllenCoder 不知道是不是用了ButterKnife框架的问题冲突? 我修改Demo的PullToRefreshAdapter,改成自定义的ViewHolder,里面用ButterKnife去注入控件,就会报上述的错误。 用系统的findViewById反而没事,当初开发的时候忘记有没有测试findViewById的问题出现,但是现在ButterKnife是必复现。
是不是和这个问题类似?#598
修改的code:
public class PullToRefreshAdapter extends BaseQuickAdapter<Status, PullToRefreshAdapter.MyViewHolder> {
public PullToRefreshAdapter() {
super(R.layout.layout_animation, DataServer.getSampleData(10));
}
@Override
protected void convert(MyViewHolder helper, Status item) {
switch (helper.getLayoutPosition() %
3) {
case 0:
helper.img.setImageResource(R.mipmap.animation_img1);
break;
case 1:
helper.img.setImageResource(R.mipmap.animation_img2);
break;
case 2:
helper.img.setImageResource(R.mipmap.animation_img3);
break;
}
helper.tweetName.setText("Rio");
String msg = "\"He was one of Australia's most of distinguished artistes, renowned for his portraits\"";
helper.tweetText.setText(SpannableStringUtils.getBuilder(msg).append("landscapes and nedes").setClickSpan(clickableSpan).create());
helper.tweetText.setMovementMethod(LinkMovementMethod.getInstance());
}
public static class MyViewHolder extends BaseViewHolder {
@BindView(R.id.img)
ImageView img;
@BindView(R.id.tweetName)
TextView tweetName;
@BindView(R.id.tweetText)
TextView tweetText;
@BindView(R.id.tweetDate)
TextView tweetDate;
@BindView(R.id.card_view)
CardView cardView;
public MyViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
// img= (ImageView) view.findViewById(R.id.img);
// tweetName= (TextView) view.findViewById(R.id.tweetName);
// tweetText= (TextView) view.findViewById(R.id.tweetText);
}
}
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
ToastUtils.showShortToast("事件触发了 landscapes and nedes");
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(Utils.getContext().getResources().getColor(R.color.clickspan_color));
ds.setUnderlineText(true);
}
};
}
参考链接 https://github.com/JakeWharton/butterknife/issues/230
With this you'll probably see that it cannot find the generated class. This means one of two things:
1. Annotation processing is not running. If you are building from an IDE there are instructions on the website at the bottom.
2. ProGuard is stripping or renaming the class. There are instructions on the website for preventing that.
butterknife只要是public 就可以了。。。你测试过没有? 上面给的代码也是public static MyViewHolder .. 混淆当然是加了,况且我跑的是debug,不影响。。。 看我第二条回复的,是可以解决,但是你们文档提供的方式不能处理这种异常。不会奔溃,捕获了异常。
问题就出在你说的第三条,底部头部等布局都去走Item的Holder,才会出现的、
如果是第三条的原因是不是可以判断下item的type再走butterknife加载方法?这样是不是可以解决?
应该是吧,但是需要再初始化布局的时候就需要去判断type,如果大家用到butterknife,可以先按这样的方式来写,目前没发现其他问题。我暂时先关闭吧。
多谢提供解决方案 @hcadoid
只要自定义BaseViewHolder的有设置头部尾部或者加载更多就会错误,看了其他的issues,没看懂怎么解决