当前位置: 首页 > 知识库问答 >
问题:

当滚动和重新加载同时发生时,RecycerView崩溃

施阳夏
2023-03-14

在我的应用程序中,我使用RecycerView,当用户向下滚动时,它可以继续加载图像。但这让我遇到了一个我无法解决的问题。基本上,我是说

        loadPhotos.LoadMoreItems(3);
        var onScrollListener = new XamarinRecyclerViewOnScrollListener(mLayoutManager);
        onScrollListener.LoadMoreEvent += (object sender, EventArgs e) => 
        {
            int oldCount = loadPhotos.pictures.Count;
            loadPhotos.LoadMoreItems(3);
            mAdapter.NotifyItemRangeChanged(oldCount - 1, loadPhotos.pictures.Count);
        };
 “cannot call this method while RecyclerView is computing a layout or scrolling” 
mAdapter.NotifyItemRangeChanged(oldCount - 1, loadPhotos.pictures.Count);

所以,我真的很困惑如何做到这一点。作为额外的信息,这是我的整个活动:

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        SetContentView(Resource.Layout.Fragment_Gallery);


        galleryType = Intent.GetIntExtra("galleryType", 0);

        picturesinarow = Intent.GetIntExtra("picturesinarow", 1);

        recyclerLayout = Intent.GetIntExtra("recyclerLaoyut", (int)RecyclerLayout.Multiplepics);

        hasHeader = Intent.GetBooleanExtra("hasHeader", false);

        // Instantiate the photo album:
        loadPhotos = new BookOfLife.CustomRecyclerView.ReloadAdapter(this.galleryType);
        loadPhotos.LoadMoreItems(3);//(Constants.ITEMSPERPAGE);

        // Get our RecyclerView layout:
        mRecyclerView = FindViewById<RecyclerView>(Resource.Id.recyclerView);



        //............................................................
        // Layout Manager Setup:

        // Use the built-in linear layout manager:
        //mLayoutManager = new LinearLayoutManager(this);

        // Or use the built-in grid layout manager (two horizontal rows):
        mLayoutManager = new GridLayoutManager(this, this.picturesinarow, GridLayoutManager.Vertical, false);

        // Plug the layout manager into the RecyclerView:
        mRecyclerView.SetLayoutManager(mLayoutManager);

        //............................................................
        // Adapter Setup:

        // Create an adapter for the RecyclerView, and pass it the
        // data set (the photo album) to manage:
        mAdapter = new PhotoAlbumAdapter(loadPhotos, this.picturesinarow, (RecyclerLayout)this.recyclerLayout, this.hasHeader);

        // Register the item click handler (below) with the adapter:
        mAdapter.ItemClick += OnItemClick;

        // Plug the adapter into the RecyclerView:
        mRecyclerView.SetAdapter(mAdapter);
        //.........................................................................

        //Set Spanwidth for GridHeader
        mLayoutManager.SetSpanSizeLookup(new GridViewSpansizeLookup(mAdapter, mLayoutManager));


        // On Scroll Listener
        var onScrollListener = new XamarinRecyclerViewOnScrollListener(mLayoutManager);
        onScrollListener.LoadMoreEvent += (object sender, EventArgs e) => 
        {
            int oldCount = loadPhotos.pictures.Count;
            loadPhotos.LoadMoreItems(3);//(Constants.LOADNEXTITEMSTHRESHHOLD);


            mAdapter.NotifyItemRangeChanged(oldCount - 1, loadPhotos.pictures.Count);
        };

        mRecyclerView.AddOnScrollListener(onScrollListener);
    }

希望你们能帮帮我:)

共有1个答案

钦德佑
2023-03-14

好吧,我似乎找到了一个简单的解决办法:

if (!mRecyclerView.isComputingLayout())
    mAdapter.NotifyItemRangeChanged(oldCount - 1, loadPhotos.pictures.Count);

我只需要确保,我总是有足够的照片,以便回收器视图会滚动。

 类似资料:
  • 我有,它有分页,当我滚动一些时候,它正在崩溃。当我慢慢滚动时,它没有崩溃。我已经提供了适配器和活动代码。请让我知道我在这里做错了什么。我已经搜索了相同的问题,但无法在此处捕获错误。 显示某些错误(日志):

  • 问题内容: 我正在使用以下代码,当滚动条到达底部时,该代码将正常工作, 但是我希望当我达到滚动的70%而不是100时触发ajax。 问题答案: 如果滚动到页面底部时当前触发检查,则可以尝试一些基本算法: 如果还没有,请确保添加一个检查以免同时触发多个Ajax请求。 这完全超出了问题的范围,但是如果您想要一个示例,说明如何防止同时触发多个请求: 声明一个全局变量,例如。 然后将其合并到您的函数中:

  • 问题内容: 我正在使用Spring 3.0开发一个webapp,处于休眠状态。当我尝试在WAS 7.0上部署我的应用程序时,它给了我错误- 无法加载侦听器:org.springframework.web.context.ContextLoaderListener]:java.lang.ClassNotFoundException: 这是我的网络应用程序的外观: 引发的异常如下: 那么,web.xm

  • 那么我如何能够重置配置或者刷新log4j2配置运行时呢?

  • 我已经编译了一个用于jni的测试dll。除了#include之外,它实际上完全是空的 这是加载库的类: true是最后打印的内容,证明错误在true和loaded!之间!。如果我在eclipse中运行,会打印两条错误消息,但互联网不知道它们是什么。 信息: 堆栈转储是无信息的。 当我在维基百科页面上运行示例时,实验也失败了。它以同样的方式失败。

  • 我有一个工作应用程序,但我想改进一点。方法(“private fun save”),负责保存我需要的信息,我希望使其异步。 但问题是,当我把它改成——“私有挂起fun save”的时候,我要做suspend和override fun拦截方法。但是由于它被覆盖,我得到一个错误: 冲突重载:public open suspend fun intercept(链:Interceptor.chain):c