当RecyclerView的内容发生变化时,我有时会出现问题 . 我有搜索视图,过滤RecyclerView的数据 . 过滤后我调用notifyDataSetChanged();
我使用https://gist.github.com/mheras/0908873267def75dc746作为适配器 .
我当时认为这个问题与添加页脚有关,但删除页脚问题后仍然会出现,但不是经常出现
例外:
java.lang.IllegalStateException:添加了View将RecyclerView作为父级,但视图不是真正的子级 . 未过滤的索引:0,android.support.v7.widget.RecyclerView $ LayoutManager.addViewInt(RecyclerView.java:7048),位于android.support的android.support.v7.widget.RecyclerView $ LayoutManager.addView(RecyclerView.java:7012) .v7.widget.RecyclerView $ LayoutManager.addView(RecyclerView.java:7000)在android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1428)android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager) .java:1377)在Android.support.v7上的android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:578)android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3260) . widget.RecyclerView.dispatchLayout(RecyclerView.java:3069)位于android.view.view.layout(View.java:16636)的android.sview.v7.widget.RecyclerView.onLayout(RecyclerView.java:3518)android.view .ViewGroup.layout(ViewGroup.java:5437)在android.vie的android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:598)在Android.widget.FrameLayout.onLayout的android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)的android.view.ViewGroup.layout(ViewGroup.java:5437)的w.View.layout(View.java:16636) (FrameLayout.java:273)在Android.widget.FrameLayout.layoutChildren(FrameLayout.java)的android.view.View.layout(ViewGroup.java:5437)上的android.view.View.layout(View.java:16636) 336)在android.view.Loutout(ViewLayout.java:273)的android.view.View.layout(View.java:16636)上的android.view.View( . widget.FrameLayout.layoutChildren(FrameLayout.java:336)位于android.view.View.Viewout.layout的android.view.View.layout(View.java:16636)的android.widget.FrameLayout.onLayout(FrameLayout.java:273) (ViewGroup.java:5437)android.widget.FrameLayout.onout中的android.widget.FrameLayout.layoutChildren(FrameLayout.java:336),android.view.layout(View.java):android.widget.FrameLayout.onLayout(FrameLayout.java:273) 16636)在andr的android.view.ViewGroup.layout(ViewGroup.java:5437) oid.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:435)在android.view.View.layout(View.java:16636)的android.view.ViewGroup.layout(ViewGroup.java:5437)在android .widget.FrameLayout.layoutChildren(FrameLayout.java:336)位于android.view.View.View的android.view.Routout.onLayout(FrameLayout.java:273)android.view.View.layout(View.java:16636) . android.widget.Line中的android.widget.Linear.ayoutVertical(LinearLayout.java:1586)的android.widget.LinearLayout.onLayout(LinearLayout.java:1586)的android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)布局(ViewGroup.java:5437)(LinearLayout.java) :1495)在android.view.View.layout(View.java:16636)的android.view.ViewGroup.layout(ViewGroup.java:5437)在android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)在android .widget.FrameLayout.onLayout(FrameLayout.java:273)at com.android.internal.policy.PhoneWindow $ DecorView.onLayout(PhoneWindow.java:2678)at android.view.View.layout(View.java:16636)at at android.view.ViewGroup.l ayout(ViewGroup.java:5437)位于android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1917)的android.view.ViewRootImpl.performLversout(ViewRootImpl.java:2171),来自android.view.ViewRootImpl.doTraversal(ViewRootImpl.java) :1107)在Android.view.ChoreIs上运行android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:6013),在android.view.Choreographer.doCallbacks(Choreographer.java)的android.view.Choreographer $ CallbackRecord.run(Choreographer.java:858) 670)在Android.view.Handler.handleCallback(Handler.java:739)的android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:844)的android.view.Choreographer.doFrame(Choreographer.java:606) android.os.Handler.dispatchMessage(Handler.java:95)位于android.app.Looper.loop(Looper.java:148)的android.app.ActivityThread.main(ActivityThread.java:5417),位于java.lang.reflect .Method.invoke(NAT
2 回答
我遇到了同样的问题......我通过使用
Context
从 parent.getContext() 充气ViewHolder
并在inflate
的调用中指定 false 解决了这个问题:我们实际通过编写自己的适配器解决它: