BaseRecyclerViewAdapterHelper
BaseRecyclerViewAdapterHelper copied to clipboard
项目使用databinding 使用默认的加载更多布局会报黄色警告
复现demo地址:https://github.com/taany6210/TestAdapter
错误日志:
W/System.err: java.lang.reflect.InvocationTargetException
W/System.err: at java.lang.reflect.Constructor.newInstance(Native Method)
W/System.err: at com.chad.library.adapter.base.BaseQuickAdapter.createBaseGenericKInstance(BaseQuickAdapter.kt:711)
W/System.err: at com.chad.library.adapter.base.BaseQuickAdapter.createBaseViewHolder(BaseQuickAdapter.kt:653)
W/System.err: at com.chad.library.adapter.base.BaseQuickAdapter.onCreateViewHolder(BaseQuickAdapter.kt:232)
W/System.err: at com.chad.library.adapter.base.BaseQuickAdapter.onCreateViewHolder(BaseQuickAdapter.kt:75)
W/System.err: at androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6794)
W/System.err: at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975)
W/System.err: at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
W/System.err: at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
W/System.err: at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
W/System.err: at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
W/System.err: at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
W/System.err: at androidx.recyclerview.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1331)
W/System.err: at androidx.recyclerview.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1075)
W/System.err: at androidx.recyclerview.widget.RecyclerView.scrollStep(RecyclerView.java:1832)
W/System.err: at androidx.recyclerview.widget.RecyclerView.scrollByInternal(RecyclerView.java:1927)
W/System.err: at androidx.recyclerview.widget.RecyclerView.onTouchEvent(RecyclerView.java:3187)
W/System.err: at android.view.View.dispatchTouchEvent(View.java:9300)
W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2547)
W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240)
W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
W/System.err: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
W/System.err: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
W/System.err: at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403)
W/System.err: at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737)
W/System.err: at android.app.Activity.dispatchTouchEvent(Activity.java:2783)
W/System.err: at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
W/System.err: at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364)
W/System.err: at android.view.View.dispatchPointerEvent(View.java:9520)
W/System.err: at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4224)
W/System.err: at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4090)
W/System.err: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3636)
W/System.err: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3689)
W/System.err: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3655)
W/System.err: at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3781)
W/System.err: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3663)
W/System.err: at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3838)
W/System.err: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3636)
W/System.err: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3689)
W/System.err: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3655)
W/System.err: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3663)
W/System.err: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3636)
W/System.err: at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5916)
W/System.err: at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5890)
W/System.err: at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5851)
W/System.err: at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6019)
W/System.err: at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
W/System.err: at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
W/System.err: at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
W/System.err: at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5990)
W/System.err: at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:6042)
W/System.err: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
W/System.err: at android.view.Choreographer.doCallbacks(Choreographer.java:670)
W/System.err: at android.view.Choreographer.doFrame(Choreographer.java:600)
W/System.err: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err: at android.os.Looper.loop(Looper.java:148)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5539)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
W/System.err: Caused by: java.lang.IllegalArgumentException: View is not a binding layout
W/System.err: at androidx.databinding.DataBindingUtil.bind(DataBindingUtil.java:180)
W/System.err: at androidx.databinding.DataBindingUtil.bind(DataBindingUtil.java:152)
W/System.err: at com.chad.library.adapter.base.viewholder.BaseDataBindingHolder.
错误地点:
我跑了下你的demo,并没有崩溃哦
我跑了下你的demo,并没有崩溃哦
不是崩溃 是黄色的警告
图片上传了 不知道能显示出来吗
View is not a binding layout
W: Caused by: java.lang.IllegalArgumentException: View is not a binding layout
W: at androidx.databinding.DataBindingUtil.bind(DataBindingUtil.java:180)
W: at androidx.databinding.DataBindingUtil.bind(DataBindingUtil.java:152)
W: at com.chad.library.adapter.base.viewholder.BaseDataBindingHolder.
当绑定的QuickAdapter的BaseViewHolder是BaseDataBindingHolder的时候,mHeaderLayout的createBaseViewHolder也走createBaseGenericKInstance 导致DataBindingUtil.bind(mHeaderLayout),但是mHeaderLayout不是
W: Caused by: java.lang.IllegalArgumentException: View is not a binding layout W: at androidx.databinding.DataBindingUtil.bind(DataBindingUtil.java:180) W: at androidx.databinding.DataBindingUtil.bind(DataBindingUtil.java:152) W: at com.chad.library.adapter.base.viewholder.BaseDataBindingHolder.(BaseDataBindingHolder.kt:16)
当绑定的QuickAdapter的BaseViewHolder是BaseDataBindingHolder的时候,mHeaderLayout的createBaseViewHolder也走createBaseGenericKInstance 导致DataBindingUtil.bind(mHeaderLayout),但是mHeaderLayout不是的布局。同理 LOAD_MORE_VIEW,HEADER_VIEW也有这个问题。导致上面的错误 建议 下面方法 ,LOAD_MORE_VIEW,HEADER_VIEW,EMPTY_VIEW等情况不要走createBaseGenericKInstance protected open fun createBaseViewHolder(view: View): VH { var temp: Class<>? = javaClass var z: Class<>? = null while (z == null && null != temp) { z = getInstancedGenericKClass(temp) temp = temp.superclass } // 泛型擦除会导致z为null val vh: VH? = if (z == null) { BaseViewHolder(view) as VH } else { createBaseGenericKInstance(z, view) } return vh ?: BaseViewHolder(view) as VH }
支持,希望作者能优化下
同顶
希望作者能优化下
出现这种情况的原因是LOAD_MORE_VIEW默认布局不是以layout标签作为根节点导致的,我目前的解决办法是重新定义加载更多布局。希望作者能把默认布局转换一下
希望作者能优化下
顶一下,出现了同样的问题
顶一下,同样出现问题。虽然不会崩溃,但是看着是挺闹心。
确实还存在这个问题
确实还存在这个问题
顶一下,同样出现问题。虽然不会崩溃,但是看着是挺闹心。
由于: Header Footer EmptyLayout 都不是layout 布局包裹 绑定时会有Argument异常报错 private lateinit var mHeaderLayout: LinearLayout private lateinit var mFooterLayout: LinearLayout private lateinit var mEmptyLayout: FrameLayout
解决 : 继承 BaseViewHolder 写自己的BaseDataBingViewHolder
protected BD viewBing;
public YkBaseDataBingViewHolder(@NonNull View view) {
super(view);
if (view.getTag() instanceof String){ // 判断是否是ViewDataBinding
viewBing= DataBindingUtil.bind(view);
}
}
public BD getViewBing() {
return viewBing;
}
由于: Header Footer EmptyLayout 都不是layout 布局包裹 绑定时会有Argument异常报错 private lateinit var mHeaderLayout: LinearLayout private lateinit var mFooterLayout: LinearLayout private lateinit var mEmptyLayout: FrameLayout
解决 : 继承 BaseViewHolder 写自己的BaseDataBingViewHolder
protected BD viewBing;
public YkBaseDataBingViewHolder(@NonNull View view) { super(view); if (view.getTag() instanceof String){ // 判断是否是ViewDataBinding viewBing= DataBindingUtil.bind(view); } } public BD getViewBing() { return viewBing; }
并没有解决问题