我更新时,Recyclerview位置更改为第一个位置

时间:2017-01-21 07:11:41

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

当我滚动RecyclerView时,我正在使用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();
             }
           }
         }


将InnerClass

FirstRequestToGraph(AccessToken).then(function() {
    alert('testing1234');
});

function RequestNextPage(NextPage) {
    return fetch(NextPage, {
        method: 'GET'
    })
    .then(function(response) {
        return response.json();
    })
    .then(function(json) {
        RequestNextPage(json.paging.next);
    })
    .catch(function(err) {
        console.log(`Error: ${err}`)
    });
}

function FirstRequestToGraph(AccessToken) {
    return fetch('https://graph.facebook.com/v2.8/me?fields=posts.limit(275){privacy}%2Cname&access_token=' + AccessToken, {
        method: 'GET'
    })
    .then(function(response) {
        return response.json();
    })
    .then(function(json) {
        if(json.data.length !== 0 ){
           return RequestNextPage(json.paging.next);
        }
    })
    .catch(function(err) {
        console.log(`Error: ${err}`)
    });
}

3 个答案:

答案 0 :(得分:2)

试试这个,

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();
    }
}

答案 1 :(得分:1)

加载时,您必须知道新加载项目的顶部元素的位置。只需致电:

recyclerView.scrollToPosition(position);

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

答案 2 :(得分:1)

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

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

在onCreate中初始化适配器

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