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

PullToRefreshUseActivity界面快速滑动很容易就挂掉了, 暂时还没发现具体原因 #16

Closed
HolenZhou opened this issue May 11, 2016 · 22 comments

Comments

@HolenZhou
Copy link

java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{7b483c2 position=7 id=-1, oldPos=-1, pLpos:-1 no parent}
at android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:4499)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4630)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4611)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1988)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1384)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1347)
at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1175)
at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1031)
at android.support.v7.widget.RecyclerView.scrollByInternal(RecyclerView.java:1504)
at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:2461)
at android.view.View.dispatchTouchEvent(View.java:8968)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2698)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2410)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2425)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2425)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2425)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2425)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2425)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2559)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1767)
at android.app.Activity.dispatchTouchEvent(Activity.java:2866)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2520)
at android.view.View.dispatchPointerEvent(View.java:9173)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4706)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4544)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4068)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4121)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4087)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4201)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4095)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4258)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4068)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4121)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4087)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4095)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4068)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6565)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6455)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6426)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6655)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
at android.view.InputEventReceiver.consumeB

@CymChad
Copy link
Owner

CymChad commented May 11, 2016

请描述复现的过程,最好能够提供使用代码,这边无法复现,所以无法很好的解决。

@HolenZhou
Copy link
Author

我clone当前这个库的代码跑到手机上,没有改动任何代码,跑到手机上,在PullToRefreshUseActivity界面手指快速上下滚动list,偶尔就会出现这个崩溃。我准备用你的库,现在也在看这个bug,这里有个一样的问题:https://code.google.com/p/android/issues/detail?id=77846#hc141

@HolenZhou
Copy link
Author

recycler_bug

@CymChad
Copy link
Owner

CymChad commented May 11, 2016

恩,了解,看来这个是recyclerview控件本身,更新数据的时候出的问题,我这边也想想解决方案。我这边是在无法复现,我先多试试几台机器,非常感谢!

@CymChad
Copy link
Owner

CymChad commented May 11, 2016

你试下这个看可以不?http://blog.csdn.net/lovexieyuan520/article/details/50537846 因为我这边无法复现,所以不能很好的测试,麻烦你那边测试一下。

@linheimx
Copy link

@CymChad 博客的内容:捕获这个异常,确实可以这个解决问题。

但是,快速的下拉刷新,上来加载(最好多试几次),新的问题又来了:
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 13(offset:13).state:14 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4659)

@linheimx
Copy link

@linheimx
Copy link

再附上一个链接(也许有帮助):HabitRPG/habitica-android#108

@CymChad
Copy link
Owner

CymChad commented May 11, 2016

恩 好的 多谢 我看看

@ghost
Copy link

ghost commented May 12, 2016

java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{fb9eb29 position=13 id=-1, oldPos=-1, pLpos:-1 no parent}
at android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:4505)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4636)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4617)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1994)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1390)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1353)
at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1180)
at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1031)
at android.support.v7.widget.RecyclerView.scrollByInternal(RecyclerView.java:1529)
at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:2486)
at android.view.View.dispatchTouchEvent(View.java:9306)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2548)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2241)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737)
at android.app.Activity.dispatchTouchEvent(Activity.java:2820)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364)
at android.view.View.dispatchPointerEvent(View.java:9526)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4255)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4121)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3662)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3715)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3681)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3807)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3689)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3864)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3662)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3715)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3681)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3689)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3662)
at android.view.V

java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 21(offset:21).state:22
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4659)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4617)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1994)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1390)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1353)
at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1180)
at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1031)
at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:4061)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:860)
at android.view.Choreographer.doCallbacks(Choreographer.java:672)
at android.view.Choreographer.doFrame(Choreographer.java:605)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:846)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5438)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)

我也遇到过了,好像就是RecyclerView 本身的问题。
https://drakeet.me/recyclerview-bug-indexoutofboundsexception-inconsistency-detected-invalid-item-position-solution?utm_source=tuicool&utm_medium=referral

@CymChad
Copy link
Owner

CymChad commented May 12, 2016

恩 是RecyclerView 本身的问题, 你用上面的那个方法,解决了 Inconsistency detected. Invalid view holder adapter 吗?

@CymChad CymChad closed this as completed May 18, 2016
@JeffrayZ
Copy link

请问这个问题有解决思路吗???我今天也遇到这个问题了

@CymChad
Copy link
Owner

CymChad commented May 30, 2016

我的想法是,当上拉的时候显示一个弹出框,禁止用户操作,等加载完成后再让用户操作,这样就不会出现这种问题了。

@JeffrayZ
Copy link

JeffrayZ commented May 30, 2016

我好像解决了这个问题,但是只能是保证不蹦,可能点击事件有问题,没具体看。用的是非常基本的办法,别笑话我!
@OverRide
public void addFooterView(View footer) {
super.addFooterView(footer);
mFooterView = footer;
}

public View getFooterView(){
    return mFooterView;
}

@Override
public void addHeaderView(View header) {
    super.addHeaderView(header);
    mHeaderView = header;
}

public View getHeaderView(){
    return mHeaderView;
}
@Override
public int getItemCount() {
    if (getFooterView() != null && getHeaderView() != null){
        return mData.size() + 2;
    } else if (getFooterView() != null || getHeaderView() != null){
        return mData.size() + 1;
    } else {
        return mData.size();
    }
}

这样好像是可以的。对了,在主代码里面记得加上adapter.addFooterView(View mView);

@CymChad
Copy link
Owner

CymChad commented May 30, 2016

getFooterView() != null && getFooterView() != null 这两个不是一样的吗?

@CymChad
Copy link
Owner

CymChad commented Jun 5, 2016

compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.7.7' 这个版本已经解决了上拉再下拉的问题了

@Chenayi
Copy link

Chenayi commented Jun 5, 2016

非常感谢,纠结了这问题好久

@PongPloy2016
Copy link

you try

mRecyclerView.getRecycledViewPool().clear();
adapter.notifyDataSetChanged();

@blackhorse6
Copy link

2.2.2还是出现这样的问题

@CymChad
Copy link
Owner

CymChad commented Dec 6, 2016

@chenbinzhou 更新最新版本

@PongPloy2016
Copy link

hey you !!! What is problem often to java.lang.IndexOutOfBoundsException and Then fix it @CymChad

@CymChad
Copy link
Owner

CymChad commented Dec 6, 2016

Is issue of notifyDataSetChanged @PongPloy2016

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

7 participants