【问题标题】:Recyclerview Position changing to first position when I UpdateRecyclerview 位置在我更新时更改为第一个位置
【发布时间】:2017-01-21 07:11:41
【问题描述】:

当我滚动RecyclerView 时,我使用的是onLoadMoreListener。当您滚动到底部时,它将更新RecyclerView 数据。更新Recyclerview 数据后。 Recyclerview 回到顶部。理想情况下,我想保留RecyclerView 中的职位。关于我应该如何去做这件事有什么想法吗?

mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
              new GroupData().execute();
            }
        });


内部类

    public static class GroupData extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... voids) {
           try{
             GroupList gm = new GroupList();
             .....
             groupvalues.add(gm);
            } catch (Exception e){
               Log.d("Grouplist ", e.toString());
           }
          return null;
        }
        @Override
        protected void onPostExecute(Void aVoid) {
             super.onPostExecute(aVoid);
             mAdapter = new GroupAdapter(groupvalues,mrecyclerview);
             mrecyclerview.setAdapter(mAdapter);
             progressDialog.dismiss();
             mAdapter.notifyDataSetChanged();
             }
           }
         }

【问题讨论】:

  • 您似乎刷新了 Recyclerview 而不是加载更多。尝试先改变你的逻辑

标签: android android-recyclerview android-adapter android-scrollview


【解决方案1】:

试试这个,

public static class GroupData extends AsyncTask<Void, Void, Void> {
    int size = 0;

    @Override
    protected void onPreExecute() {
        size = groupvalues.size();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        try {
            GroupList gm = new GroupList();
            .....
            groupvalues.add(gm);
        } catch (Exception e) {
            Log.d("Grouplist ", e.toString());
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        mAdapter.notifyItemRangeChanged(size, groupvalues.size() - size);
        progressDialog.dismiss();
    }
}

【讨论】:

    【解决方案2】:

    在加载时,您必须知道新加载项的顶部元素的位置。只需调用:

    recyclerView.scrollToPosition(position);
    

    或者只是保存你的 recyclerView 的最后一个已知位置,并在加载更多项目时滚动到该位置

    【讨论】:

      【解决方案3】:

      只需在 onPostExecute 中通知您的适配器。无需再次初始化您的适配器。

          @Override
          protected void onPostExecute(Void aVoid) {
               super.onPostExecute(aVoid);
               progressDialog.dismiss();
               mAdapter.notifyDataSetChanged();
          }
      

      在 onCreate 中初始化你的适配器

      mAdapter = new GroupAdapter(groupvalues,mrecyclerview);
      mrecyclerview.setAdapter(mAdapter);
      

      【讨论】:

      • 您遇到了什么问题?
      • 更新recyclerview数据后。 Recyclerview 回到顶部。理想情况下,我想保留在 ListView 中的位置。关于我应该如何去做这件事有什么想法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多