BaseRecyclerViewAdapterHelper icon indicating copy to clipboard operation
BaseRecyclerViewAdapterHelper copied to clipboard

项目使用databinding 使用默认的加载更多布局会报黄色警告

Open taany6210 opened this issue 4 years ago • 13 comments

复现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.(BaseDataBindingHolder.kt:16)

错误地点: image

taany6210 avatar Apr 14 '20 09:04 taany6210

我跑了下你的demo,并没有崩溃哦

limuyang2 avatar May 18 '20 06:05 limuyang2

我跑了下你的demo,并没有崩溃哦

不是崩溃 是黄色的警告 QQ20200518-161921@2x 图片上传了 不知道能显示出来吗

taany6210 avatar May 18 '20 08:05 taany6210

View is not a binding layout

731201378 avatar Jun 03 '20 06:06 731201378

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 }

JadynChan avatar Jul 02 '20 11:07 JadynChan

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 }

支持,希望作者能优化下

nemo-ex avatar Jul 09 '20 13:07 nemo-ex

同顶

kakarrot avatar Sep 11 '20 06:09 kakarrot

希望作者能优化下

v1ncent9527 avatar Sep 14 '20 08:09 v1ncent9527

出现这种情况的原因是LOAD_MORE_VIEW默认布局不是以layout标签作为根节点导致的,我目前的解决办法是重新定义加载更多布局。希望作者能把默认布局转换一下

MrDon94 avatar Oct 13 '20 09:10 MrDon94

希望作者能优化下

me-xg avatar Nov 15 '20 09:11 me-xg

顶一下,出现了同样的问题

shejishi avatar Nov 19 '20 09:11 shejishi

顶一下,同样出现问题。虽然不会崩溃,但是看着是挺闹心。

z2700589 avatar Nov 24 '20 07:11 z2700589

确实还存在这个问题

yihu5566 avatar Aug 25 '22 06:08 yihu5566

确实还存在这个问题

unbili avatar Sep 12 '22 01:09 unbili

顶一下,同样出现问题。虽然不会崩溃,但是看着是挺闹心。

oooo7777777 avatar Nov 18 '22 02:11 oooo7777777

由于: 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;
}

libokaifa avatar Feb 14 '23 06:02 libokaifa

由于: 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;
}

并没有解决问题

wusir-china avatar Aug 11 '23 05:08 wusir-china