相关疑难解决方法(0)

RecyclerView onClick

有没有人使用RecyclerView找到一种方法来设置一个onClickListener项目RecyclerView?我想为每个项目的每个布局设置一个监听器,但这似乎有点太麻烦我确信有一种方法RecyclerView可以听取这个onClick事件,但我无法弄明白.

android onclick onclicklistener android-recyclerview

544
推荐指数
24
解决办法
54万
查看次数

在RecyclerView中检测到不一致,如何在滚动时更改RecyclerView的内容

我正在使用RecyclerView显示项目的名称.我的行包含单行TextView.项目名称存储在List<String> mItemList.

要更改内容RecyclerView,我替换字符串mItemList并调用notifyDataSetChanged()RecyclerViewAdapter.

但是如果我尝试更改mItemListRecyclerView滚动时的内容,有时它会给我 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 157(offset:157).state:588

如果尺寸mItemList小于之前,就会发生这种情况.那么改变内容的正确方法是RecyclerView什么?这是一个错误RecyclerView吗?

这是Exception的完整堆栈跟踪:

java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 157(offset:157).state:588
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3300)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3258)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1803)
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1302)
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1265)
        at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1093)
        at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:956)
        at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:2715)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
        at android.view.Choreographer.doCallbacks(Choreographer.java:555)
        at android.view.Choreographer.doFrame(Choreographer.java:524)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
        at android.os.Handler.handleCallback(Handler.java:615)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4921)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at …
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview

57
推荐指数
6
解决办法
5万
查看次数

Recycler View:检测到不一致.视图持有者适配器positionViewHolder无效

Recycler View Inconsistency检测到错误,在加载更多项目时快速滚动或滚动时出现错误.

FATAL EXCEPTION: main
Process: com.pratap.endlessrecyclerview, PID: 21997
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{56a082c position=40 id=-1, oldPos=39, pLpos:39 scrap [attachedScrap] tmpDetached no parent}
at android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:4251)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4382)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4363)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2864)
at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1445)
at android.support.v7.widget.RecyclerView.access$400(RecyclerView.java:144)
at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:282)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:603)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
Run Code Online (Sandbox Code Playgroud)

适配器

public class DataAdapter extends RecyclerView.Adapter {
    private …
Run Code Online (Sandbox Code Playgroud)

recycler-adapter android-recyclerview

55
推荐指数
5
解决办法
4万
查看次数

Recyclerview - 无法在滚动回调中调用此方法

我在StackOverflow中多次看到过这个问题,但我无法解决问题.所以伸出援助之手.请注意:我已经检查了其他问题,虽然我可以摆脱错误,但还有其他问题.

这是我现有的代码:

我的适配器类:

  public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

        Context context;

        private final int VIEW_TYPE_ITEM = 0;
        private final int VIEW_TYPE_LOADING = 1;
        private IOnLoadMoreListener mIOnLoadMoreListener;

        private int visibleThreshold = 3;
        private int lastVisibleItem, totalItemCount;
        private int[] lastVisibleItems = new int[mStaggeredLayoutManager.getSpanCount()];

        public RecyclerViewAdapter(Context context) {
            this.context = context;

            final StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) recyclerView.getLayoutManager();

            recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                    super.onScrolled(recyclerView, dx, dy);

                    totalItemCount = staggeredGridLayoutManager.getItemCount();
                    lastVisibleItems = staggeredGridLayoutManager.findLastVisibleItemPositions(new int[mStaggeredLayoutManager.getSpanCount()]);

                    if (staggeredGridLayoutManager.getSpanCount() == …
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview

13
推荐指数
2
解决办法
1万
查看次数

RecyclerView:IndexOutOfBoundsException检测到不一致.商品位置无效

致命异常:java.lang.IndexOutOfBoundsException检测到不一致.项目位置5无效(偏移量:5).state:24

这种崩溃发生得太多了!!!

7107用户和12k崩溃!

我在Fabric Crashlytics中得到它.

Fatal Exception: java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 5(offset:5).state:41 at android.support.v7.widget.RecyclerView$Recycler.clear(Unknown Source) at android.support.v7.widget.GapWorker.add(Unknown Source) at android.support.v7.widget.GapWorker.add(Unknown Source) at android.support.v7.widget.GapWorker.remove(Unknown Source) at android.support.v7.widget.GapWorker.add(Unknown Source) at android.support.v7.widget.GapWorker.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5930) at java.lang.reflect.Method.invoke(Method.java) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

DateList是涉及RecyclerView的片段:

public class DateList extends Fragment {

DatesItemAdapter adapter;
List<DateItem2> keyList;
CardView cardView;
double v = 1;
float radius = 1;
ProgressBarCircular mCircular;
SwipeRefreshLayout swipeRefreshLayout;
RecyclerView mRecyclerView;
Animation animSlideUp;
Animation animSlideDown;
Uri.Builder builder; …
Run Code Online (Sandbox Code Playgroud)

android adapter indexoutofboundsexception crashlytics android-recyclerview

7
推荐指数
1
解决办法
2956
查看次数

RecyclerView java.lang.IndexOutOfBoundsException:检测到不一致。无效的视图支架适配器位置。由于更改了getItemCount()

我正在java.lang.IndexOutOfBoundsException: Inconsistency detected使用RecyclerView,但是只有在我似乎将其扔掉时才使用。当我滚动得足够慢时,它不会崩溃。

我将基本适配器用于许多其他子类,但是只有某些子类会崩溃。知道为什么会这样吗?

编辑

我发现发生这种情况的原因是因为getItemCount()更改取决于页脚加载视图的状态。我相信这会导致更改和滚动时出现不一致。

我通过始终在getItemCount()中的页眉/页脚加载视图返回2个额外的项来进行测试。而不是根据其状态动态计算计数。解决此问题的好方法是什么?

我的适配器

public abstract class BaseRecyclerAdapter<T>
        extends RecyclerView.Adapter<RecyclerView.ViewHolder>
        implements LoadingAndErrorViewHolder.LoadingViewHolderListener {

    public static final int STATUS_HIDDEN = 0;
    public static final int STATUS_LOADING = 1;
    public static final int STATUS_ERROR = 2;

    protected static final int TYPE_HEADER_LOADING = 0;
    protected static final int TYPE_FOOTER_LOADING = 1;
    protected static final int TYPE_NORMAL = 2;

    private static final int POSITION_TYPE_HEADER_LOADING = 0;

    private BaseRecyclerAdapterListener mBaseRecyclerAdapterListener;
    private final List<T> mBackingList = …
Run Code Online (Sandbox Code Playgroud)

android indexoutofboundsexception recycler-adapter android-recyclerview

6
推荐指数
1
解决办法
6682
查看次数

RecyclerView:检测到不一致。无效的项目位置 - 为什么?

我们的 QA 检测到一个错误:发生了以下与 RecyclerView 相关的崩溃:`

java.lang.IndexOutOfBoundsException:检测到不一致。无效的项目位置 2(offset:2).state:3

一个残酷的解决方法可能是在异常发生时捕获异常并从头开始重新创建 RecyclverView 实例,以避免留下损坏的状态。

但是,如果可能的话,我想更好地理解这个问题(也许从源头上解决它),而不是掩盖它。

该错误很容易重现滚动继续快速创建此崩溃,但它发生时是致命的。

我的工作代码是:

public class MoviesGridRecyclerViewDataAdapter  extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

public static final int VIEW_ITEM = 1;
public static final int VIEW_PROG = -1;
private static final int FADE_DURATION = 500;
int pastVisiblesItems, visibleItemCount, totalItemCount;
private List<VideoEntity> dataList;
private FragmentActivity activity;
private int visibleThreshold = 1;
//private int lastVisibleItem, totalItemCount;
//private boolean loading = false;
private OnLoadMoreListener onLoadMoreListener;
private RecyclerView.OnScrollListener recyclerciewScrollListener;
private RecyclerView recyclerView;
private boolean followLargeItemOnDataRender;
private boolean loading = …
Run Code Online (Sandbox Code Playgroud)

java android indexoutofboundsexception android-recyclerview

5
推荐指数
1
解决办法
1231
查看次数

ViewPager2 异常:java.lang.IllegalStateException:违反了设计假设

我自己无法重现此问题,但我在运行小米 MI 9 的生产中注意到此问题Android 10。以下是我使用的ViewPager2RecyclerView版本:

androidx.recyclerview:recyclerview:1.1.0 
androidx.viewpager2:viewpager2:1.0.0
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪:

Fatal Exception: java.lang.IllegalStateException: Design assumption violated.
       at androidx.viewpager2.adapter.FragmentStateAdapter.placeFragmentInViewHolder(FragmentStateAdapter.java:287)
       at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:276)
       at androidx.viewpager2.adapter.FragmentStateAdapter.onViewAttachedToWindow(FragmentStateAdapter.java:67)
       at androidx.recyclerview.widget.RecyclerView.dispatchChildAttached(RecyclerView.java:7556)
       at androidx.recyclerview.widget.RecyclerView$5.addView(RecyclerView.java:860)
       at androidx.recyclerview.widget.ChildHelper.addView(ChildHelper.java:107)
       at androidx.recyclerview.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:8601)
       at androidx.recyclerview.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:8559)
       at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1643)
       at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
       at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:675)
       at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
       at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
       at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404)
       at android.view.View.layout(View.java:21963)
       at android.view.ViewGroup.layout(ViewGroup.java:6317)
       at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527)
       at android.view.View.layout(View.java:21963)
       at android.view.ViewGroup.layout(ViewGroup.java:6317)
       at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
       at android.view.View.layout(View.java:21963)
       at android.view.ViewGroup.layout(ViewGroup.java:6317)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:21963)
       at android.view.ViewGroup.layout(ViewGroup.java:6317)
       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
       at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
       at android.view.View.layout(View.java:21963)
       at android.view.ViewGroup.layout(ViewGroup.java:6317) …
Run Code Online (Sandbox Code Playgroud)

android android-viewpager android-recyclerview androidx android-viewpager2

3
推荐指数
1
解决办法
4032
查看次数